1

我可以在我的 C 编译器中使用浮点计算和常量!

例如

 if ( a > (100/0.1) )

将 a 与 1000 进行比较

并且在做

#define PARAMETER  777
#define FACTOR (1/3.1415)
int a = PARAMETER/FACTOR 

将 a 设置为 2440,这是浮点结果 2440.9455 的整数部分

这是 C 编译器的标准行为,我可以用浮点常量计算还是依赖于这种行为编译器?

谢谢!

4

2 回答 2

2

是的,您可以在 C 程序的表达式中使用常量执行浮点运算,是的,编译器通常会在编译时减少这些表达式。情况与整数常量几乎相同。也就是说,你的例子

if(a > (100 / 0.1))

与整数示例一样合法

if(a > (100 * 10))

还有两件事需要担心:

  1. 尤其是在较旧的编译器上,编译期间使用的浮点模型可能与运行时使用的模型有所不同,并且可能会给您稍微不同的答案。

  2. 0.1众所周知,看起来无辜的十进制分数不能用二进制浮点数精确表示,因此您的表达式100 / 0.1可能会简化为 999.99999 或 1000.00001。

于 2019-07-11T11:31:53.417 回答
0
if ( a > (100/0.1) )

这将在比较之前减少到if (a > 1000.0)Here ,a转换为 double 并与 进行比较1000.0。只要您没有太大的数字,这通常是安全的。对于非常大的数字,转换a可能会导致错误 1。

int a = PARAMETER/FACTOR 

这将减少到int a = 777/(1/3.1415)int a = 2440.9455

在这种情况下,您的浮点数2440.9455将被强制转换为int您获得 2440 的方式。

于 2019-07-11T10:47:21.330 回答