我想知道,因为当我在检查模式下运行我的代码时,似乎存在一些差异。例如:
List<List> getFactors(int n)
{
List<List> factors = [[1, n]];
double top = pow(n,1/2);
int test = 2;
while (test <= top)
{
if (n % test == 0)
factors.add([test, n ~/ test]);
test++;
}
return factors;
}
Run Code Online (Sandbox Code Playgroud)
按原样工作,但是当我更改为时pow(n,1/2),n.pow(1/2)它在检查模式下返回错误。唯一的解决方法是将类型更改n为双精度。为什么是这样?也很高兴知道两者之间的一般差异。谢谢!
更新: int/num/double.pow() 目前只存在于虚拟机中,将被移除。改用math.pow()。
int.pow() 的签名是:
int pow(int exponent)
Run Code Online (Sandbox Code Playgroud)
因此,以下示例在检查模式下失败,因为 1/2 不计算为整数。
int i = 5;
i.pow(1/2);
Run Code Online (Sandbox Code Playgroud)
所以调用 int.pow() 需要一个整数指数(仅在检查模式下检查),并返回一个整数。
并且,调用 math.pow(num x, num exponent) 不需要整数指数,如果 x 是整数并且指数是双精度数,则可能返回双精度数。
这是math.pow()文档的链接。这里是int.pow()和math.pow()源代码的链接,因此您可以看到幕后发生的事情。
| 归档时间: |
|
| 查看次数: |
3335 次 |
| 最近记录: |