0

这是一个简单的 C 程序,它从用户那里接受一个数字,结果是正方形。

#include <stdio.h>
#include <math.h>
int main()
{
    int number;
    int result;
    printf("\nEnter the number\n");
    scanf("%d",&number);
    result=(pow(number,2));
    printf("\nThe result is %d\n",result);
    return 0;
}

问题是,每当我输入 5,25,26 等作为输入时,输出为 24,624,675,即它减少 1,并且并非所有数字都会发生这种情况。我正在使用 CodeBlocks IDE。我想出了解决这个问题的方法,但我想知道幕后发生了什么,这导致了这个错误。

4

1 回答 1

0

这篇文章中,Sourav 告诉我们:

pow()接受双参数并返回一个双精度值。

如果您将返回值存储到 int 中并打印出来,您可能无法获得所需的结果。

至于为什么 pow()返回 1 比您期望的少的解释,请参阅这篇文章。具体来说:

pow()适用于双数。这些代表53 位整数形式的s * 2^e数字。s因此 double 可以存储下面的所有整数2^53,但只能存储上面的一些整数2^53。特别是,它只能表示偶数> 2^53,因为e > 0该值始终是 2 的倍数。

于 2020-03-06T21:53:10.230 回答