gpt4 book ai didi

c - 奇异的输出。输出不应该是 153 而不是 152

转载 作者:行者123 更新时间:2023-11-30 21:38:38 25 4
gpt4 key购买 nike

int main()
{

char arr[3]={'1','5','3'};
int sum=0;
for (int i=0;i<3;i++)
{
sum+=pow((arr[i]-48),3);

printf("%d to the power 3 is: %f\n",arr[i]-48,pow((arr[i]-48),3));
}
printf("sum is %d\n",sum);
}

预期输出:

1 to the power 3 is: 1.000000
5 to the power 3 is: 125.000000
3 to the power 3 is: 27.000000
sum is 153

实际输出:

1 to the power 3 is: 1.000000
5 to the power 3 is: 125.000000
3 to the power 3 is: 27.000000
sum is 152

Here is an image of the Output

输出不应该是 153 和 NOT 152 吗?

编辑:如果代替 sum+=pow((arr[i]-48),3);我用
sum+=(int)(floor(pow((arr[i]-48),3)));

输出正确地为 153。所以我不认为 pow 返回较小的整数,或者将 float 类型转换为返回较小值的整数是这里的情况

最佳答案

Microsoft pow 例程是出了名的糟糕。正如 macOS pow 所示,可以为这些操作数和类似的操作数返回正确的结果,但 Microsoft 要么没有投入工程工作来执行此操作,要么选择不更改其 pow实现。即使对于具有可用浮点表示的数学结果的小整数操作数,pow 也可能返回比正确值稍大或稍小的结果。当返回的结果小于精确整数结果时,将其转换为整数会导致截断为下一个较小的整数。

计算pow很困难,而且并非所有实现都能做得很好。对于浮点函数,理论上可能的最佳质量是正确舍入。正确舍入例程返回以浮点格式表示的数字,该数字最接近精确的数学结果,并按照所选舍入规则的方向舍入。 (最常用的舍入规则是四舍五入到最接近的值,并向偶数低位舍入。其他规则包括向 + 无穷大、向 − 无穷大和向零舍入。)计算 pow 非常困难 具有正确的舍入,据我所知,没有商业或常用的实现这样做。

尽管如此,还是可以设计pow,以便只要精确结果能够以浮点格式表示,它就返回精确结果。我记得,当前的 macOS pow 实现就是这样做的。因此,问题中的程序在使用 macOS 工具编译和执行时将产生预期的结果。 Microsoft 的 pow 没有此属性,因此计算 pow(x, 3) 可能会返回略小于 x3,即使 x3 可以表示。

即使使用高质量的 pow 实现,出于速度考虑,通常也不希望使用具有小整数幂的 pow。计算 pow(x, 3) 比计算 x*x*x 慢。

关于c - 奇异的输出。输出不应该是 153 而不是 152,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50794890/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com