ami*_*n__ 0 c floating-point double rounding
我有以下代码,
float a = 0.7;
if(0.7 > a)
    printf("Hi\n");
else
    printf("Hello\n");   //Line1
和
float a = 0.98;
if(0.98 > a)
    printf("Hi\n");
else
    printf("Hello\n");   //Line2
这里line1输出Hi但Line2输出Hello.我假设有一个关于双常数和浮点数的标准,即它们中的任何一个在评估时会变大.但是这两个代码澄清了我,当双常数变大并且其他时候浮点变大时,情况可能会出现.这背后有没有四舍五入的问题?如果是,请解释我.我非常需要这个明确的...感谢提前
Mar*_*ers 11
你有什么叫做表示错误.
要查看发生了什么,您可能会发现更容易首先考虑以不同精度(3位小数或6位小数)存储的1/3,1/2和2/3的十进制表示形式:
a = 0.333
b = 0.333333
a < b
a = 0.500
b = 0.500000
a == b
a = 0.667
b = 0.666667
a > b
提高精度可以使数字略大,略小或具有相同的值.
相同的逻辑适用于二进制浮点数.