任何人都可以简单地向我解释一下这个功能吗?

标签 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。我假设会有一个关于双常量和 float 的特定标准,即它们中的任何一个在评估时都会变得更大。但这两个代码让我明白,当 double 常量变大而其他时候 float 变大时,情况就会出现。这背后有什么四舍五入的问题吗?如果是,请向我解释。我非常需要这个清晰的.. 提前致谢

最佳答案

你所拥有的叫做representation error .

要了解发生了什么,您可能会发现首先考虑以不同精度(小数点后 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

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

同样的逻辑适用于二进制 float 。

关于任何人都可以简单地向我解释一下这个功能吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11422078/

相关文章:

c++ - 如何在没有 list 的情况下启用视觉样式

c - 将命令行给出的文件名保存在动态生成的字符串中

c - 如何左对齐 32 位整数?

python - 在 Python 和 MySQL 中存储科学记数法的最有效方式

java - 如果数字在 java 中是 int 或 double,如何在屏幕上显示消息?

c - C语言中如何乘以12位小数?

python - 从 Python 转换为 C 列表函数

c++ - 如何在 C++11 constexpr 中检查 double 的位模式是 0x0?

c - C中的 float 学获取随机数

math - 如何确定 Ada 95 中 Float 的模数