[英]Modulo operator usage while dealing with doubles
我必须找到(1 + sqrt(3))^ n的值,其中n <10 ^ 9。由于这个数字可能非常大,我们必须打印ans%1000000007。 我为此编写了以下函数。
double power(double x, int y)
{
double temp;
if( y == 0)
return 1;
temp = power(x, y/2);
if (y%2 == 0)
return temp*temp;
else
{
if(y > 0)
return x*temp*temp;
else
return (temp*temp)/x;
}
}
现在,我无法理解如何处理模态。请有人帮忙。
你不能那样做。 您可以使用fmod
,但是由于无法精确表示sqrt(3)
因此对于大指数,您会得到假值。
我非常有信心,您实际上需要整数结果( (1 + sqrt(3))^n + (1 - sqrt(3))^n
),因此您应该使用整数数学,并通过对模运算求平方来求幂每一步。 cf. 这个问题
模数需要整数类型,您可以将union用作双精度类型,并与整数结合使用模数(如果这是C)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.