有人能简单地解释一下这个功能吗?

ami*_*n__ 0 c floating-point double rounding

我有以下代码,

float a = 0.7;
if(0.7 > a)
    printf("Hi\n");
else
    printf("Hello\n");   //Line1
Run Code Online (Sandbox Code Playgroud)

float a = 0.98;
if(0.98 > a)
    printf("Hi\n");
else
    printf("Hello\n");   //Line2
Run Code Online (Sandbox Code Playgroud)

这里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
Run Code Online (Sandbox Code Playgroud)

提高精度可以使数字略大,略小或具有相同的值.

相同的逻辑适用于二进制浮点数.