gpt4 book ai didi

c++ - 使用 float 和 double 进行非常小的数字的数学运算

转载 作者:行者123 更新时间:2023-11-30 18:27:05 24 4
gpt4 key购买 nike

我编写这段代码只是为了查看使用浮点型和 double 型时精度值的差异。基本上我正在尝试计算减少的普朗克常数的值。约简普朗克常数 = 普朗克常数/2π。

#include<stdio.h>
#include<math.h>

const float H = 6.62607015e-34;
const float Pi = 3.1415926;
int main()
{
float a = H / (2 * Pi);
double b = H / (2 * Pi);
printf("float is %ld \ndouble is %ld", a, b);
return 0;
}

但是输出根本没有意义。我不知道我在这里做错了什么。

float is 536870912
double is 954303911

我什至尝试将常量的数据类型更改为 double,但这也好不到哪儿去。

float is 0
double is 954303911

我减少了常数中的有效数字,但没有什么区别。谁能告诉我我在这里做错了什么?

最佳答案

%ld 应该获取一个 long int 作为参数,而不是 double。尝试 %f%e%g,以及您选择的其他修饰符,或 printf 支持的其他格式.

此外,您应该考虑启用编译器警告,例如使用 gcc 的 -W -Wall:

: In function 'main':
:10:5: warning: format '%ld' expects argument of type 'long int', but argument 2 has type 'double' [-Wformat=]
printf("float is %ld \ndouble is %ld", a, b);
^
:10:5: warning: format '%ld' expects argument of type 'long int', but argument 3 has type 'double' [-Wformat=]

参数的类型为 double,因为当与 printf 等可变参数函数一起使用时,float 会被提升。

在您的示例中,计算基本相同:H/(2 * Pi) 计算均以 float 形式执行,然后结果转换为 double code>:一种情况是因为 bdouble,另一种情况是由于 printf 的提升规则。

关于c++ - 使用 float 和 double 进行非常小的数字的数学运算,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60184552/

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