C语言 在表达式中使用定义时结果不正确[重复]

um6iljoc  于 2023-01-29  发布在  其他
关注(0)|答案(2)|浏览(122)
    • 此问题在此处已有答案**:

The need for parentheses in macros in C [duplicate](8个答案)
2天前关闭。
数量级不正确:

#include <stdio.h>
#include <math.h>
#define M_H 1.007975/(6.02214076*pow(10,23)*1000)
#define k_B 1.380649*pow(10,-23)
int main()
{
    printf("%G\n",M_H);
    printf("%G\n",k_B);
    printf("%G\n",M_H/k_B);
    return 0;
}

因为它提供:

1.67378E-27
1.38065E-23
1.21232E-50

我需要定义好的常数。
我使用了带有-lm标志的gcc 12.2.1 - 1。我期望:

1.67378E-27
1.38065E-23
1.21232E-4
oug3syen

oug3syen1#

M_H/k_B扩展为:

1.007975/(6.02214076*pow(10,23)*1000)/1.380649*pow(10,-23)

请注意,第二个pow没有括在括号中,因此乘法是在前面的除法之后进行的。您应该将定义括在括号中,以防止:

#define M_H (1.007975/(6.02214076*pow(10,23)*1000))
#define k_B (1.380649*pow(10,-23))

我还建议您用1e-23语法(也称为科学记数法)替换pow函数调用;这样,k_B中的数字将被解析为单个标记,并且括号将不是必需的:

#define M_H (1.007975/6.02214076e26)
#define k_B 1.380649e-23

我需要定义的常量
如果由于某种原因,您无法修改这些定义,您仍然可以在使用时添加括号:

printf("%G\n",(M_H)/(k_B));
f3temu5u

f3temu5u2#

#define M_H (1.007975/(6.02214076*pow(10,23)*1000))
#define k_B (1.380649*pow(10,-23))

以确保正确的顺序

相关问题