【发布时间】:2021-05-26 12:58:03
【问题描述】:
我的代码是一个用于迭代流程的简单算法。然而,经过几次迭代,我在输出中得到了-nan。
代码:
for(int i = 0; i < 100; i++){
float n = (a+b-c)*(a+c-b)*(b+c-a)/(4*a*b*c);
printf("%f ",n);
float an = (b+c-a)*sqrt((a+b-c)*(a+c-b)/(4*b*c));
float bn = (a+c-b)*sqrt((a+b-c)*(b+c-a)/(4*a*c));
float cn = (a+b-c)*sqrt((a+c-b)*(b+c-a)/(4*a*b));
a = an;
b = bn;
c = cn;
}
a, b ,c 是之前声明的浮点数。
在输出中,大约之后。 20-30 个结果我得到了一堆 -nan
我该如何解决?我使用https://www.onlinegdb.com 作为编译器
【问题讨论】:
-
你的调试器说什么?也许您正试图取负数的平方根。
-
@tadman [Inferior 1(进程3118)正常退出]
-
嗯,崩溃在哪里?什么线?使用了哪些值?
-
@tadman a、b、c 的初始值为 pi、e 和 ln(2)。 -nan 出现在 50 个结果之后。结果为 0.01 - 0.5
-
float的限制,在我的电脑上,大约是2^(-150)...double是2^(-1076),long double是2^(-16447)