【发布时间】:2020-03-06 21:48:31
【问题描述】:
这是一个简单的 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。我想出了解决此问题的方法,但我想知道幕后发生了什么,这是导致此错误的原因。
【问题讨论】:
-
因为
pow是一个浮点函数,最好不要用于整数计算。 -
@EugeneSh。你能解释一下为什么不是每个数字都发生这种情况吗?
-
如果要对整数类型求平方,只需将其乘以自身...
result = number * number; -
添加
printf("%.25f\n", pow(number,2));了解原因。 -
@EugeneSh.:请不要关闭这些关于
pow的问题,因为它们与that 重复。当pow(25, 2)返回的结果不是 625 时,这不是浮点运算造成的。pow完全有可能返回正确的结果(因为它是可表示的)并且是可行的(因为有现有的实现应有的结果,具有高质量的准确性和性能)。实际原因是由于pow的低质量实现,而不是由于无法进行浮点运算。