gpt4 book ai didi

c - 了解 C 中的 double 运算

转载 作者:太空宇宙 更新时间:2023-11-04 06:03:15 25 4
gpt4 key购买 nike

我想明白为什么这段代码:

double r,d,rc;
scanf("%lf %lf", &r, &d);
rc = (r * r) - (d/2) * (d/2);
printf("%.2f\n", M_PI * rc);

返回比这个更精确的结果(没有 rc 变量赋值):

double r,d,rc;
scanf("%lf %lf", &r, &d);
printf("%.2f\n", M_PI * (r * r) - (d/2) * (d/2));

另一个相关问题:为什么 n * npow(n,2) 好?

最佳答案

第一个代码示例计算:

M_PI * ((r * r) - (d/2) * (d/2));

第二个计算:

(M_PI * (r * r)) - (d/2) * (d/2);

在大多数编译器上,对 pow(n, 2) 的调用与 n * n 相同。将发出完全相同 程序集。这是由于称为“强度缩减”的优化——大多数 pow() 实现将检查指数是否为 2,并将这种情况减少为一次乘法。未优化的版本稍微贵一些,因为它需要一个函数调用和一些分支。

请注意 M_PI 不是 C 标准的一部分,因此您可以使用等效项,它编译为完全相同的代码:

double M_PI = 4.0 * atan(1.0);

关于c - 了解 C 中的 double 运算,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15421755/

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