我可以在我的 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 编译器的标准行为,我可以用浮点常量计算还是依赖于这种行为编译器?
谢谢!
是的,您可以在 C 程序的表达式中使用常量执行浮点运算,是的,编译器通常会在编译时减少这些表达式。情况与整数常量几乎相同。也就是说,你的例子
if(a > (100 / 0.1))
与整数示例一样合法
if(a > (100 * 10))
还有两件事需要担心:
尤其是在较旧的编译器上,编译期间使用的浮点模型可能与运行时使用的模型有所不同,并且可能会给您稍微不同的答案。
0.1
众所周知,看起来无辜的十进制分数不能用二进制浮点数精确表示,因此您的表达式100 / 0.1
可能会简化为 999.99999 或 1000.00001。
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 的方式。