【发布时间】:2020-09-30 13:14:27
【问题描述】:
所以我有一个计算 10^100 的任务,必须在结果中使用 pow() 函数。代码如下:
#include <stdio.h>
#include <math.h>
int main()
{
long double result;
result = pow(10, 100);
printf("10^100 = %Lf", result);
}
如果我将pow(10, 100)分配给result,则显示的结果是100000000000000001590289110975991804683608085639452813897813275577478387721703810608。但是,如果我编写代码
#include <stdio.h>
#include <math.h>
int main()
{
printf("10^100 = %Lf", pow(10, 100));
}
我得到了我应该得到的,即 1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000.0000000。
所以请有人解释一下为什么会发生这种情况以及如何避免这种情况?
【问题讨论】:
-
令人惊讶的是,您在第二个版本中获得了很好的结果。这是未定义的行为,因为您只提供
double参数,而printf需要long double -
哪个编译器、版本和开关?
-
或者,研究
以使用 pow()和long double。
标签: c floating-point pow exponent