C代码指数计算给出了错误的结果
C code exponential calculation is giving wrong result
对于 int 值 2,015,671 此代码输出 475,739,751
long long cube(int n)
{
return n*n*n;
}
而正确的值应该是 8,189,529,329,933,957,120
但是使用来自 的 pow(n, 3)
我得到了正确的结果。如果它是 long long 类型的溢出那么为什么它适用于 pow ?而且没有达到long long数据类型的MAX9,223,372,036,854,775,807。这种行为的解释是什么?
将表达式的结果转换为新类型为时已晚。
如果 n
是一个 int
那么 n*n*n
是一个只包含 int
的表达式并且
产生 int
结果(存在一些微妙的隐式转换
小于 int
的类型,但这不是这里的主要问题)。
如果这个结果溢出,那么将它放在一个更宽的整数中也无济于事
恢复丢失的信息。
您需要在 计算表达式之前 执行此转换。
long long cube(int n)
{
long long r=n;
return r*r*r;
}
(或将参数改为long long
)
您必须明确地将 int 转换为 long long int。
long long cube(int n) {
return (long long int) n*n*n;
}
对于 int 值 2,015,671 此代码输出 475,739,751
long long cube(int n)
{
return n*n*n;
}
而正确的值应该是 8,189,529,329,933,957,120
但是使用来自
将表达式的结果转换为新类型为时已晚。
如果 n
是一个 int
那么 n*n*n
是一个只包含 int
的表达式并且
产生 int
结果(存在一些微妙的隐式转换
小于 int
的类型,但这不是这里的主要问题)。
如果这个结果溢出,那么将它放在一个更宽的整数中也无济于事
恢复丢失的信息。
您需要在 计算表达式之前 执行此转换。
long long cube(int n)
{
long long r=n;
return r*r*r;
}
(或将参数改为long long
)
您必须明确地将 int 转换为 long long int。
long long cube(int n) {
return (long long int) n*n*n;
}