c - 当我向它添加 0.1 时, float 不会改变

标签 c

我是 c 的新手。所以当我写一个小游戏演示时,我遇到了一个非常奇怪的问题。

 void testC()
 {
     float a = 825300160;
     float b = a + 0.1;
     assert(a != b);
 }

上面的assert语句不能通过。很奇怪。
我的环境是mac os ml。海合会 4.2.1

最佳答案

float 的小数部分由 23 位组成。您需要 30 位来表示 825300160,因此该数字的次要部分将被丢弃。添加 .1 没有什么区别 - 您需要添加大约 32 才能更改数字:

float a = 825300160;
float b = a + 31.5;
assert(a != b); // No change is detected
float c = a + 32;
assert(a != c); // Change is detected

关于c - 当我向它添加 0.1 时, float 不会改变,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13557036/

相关文章:

c - strtok在c中返回int类型

c - unsigned long int 给出整数溢出

c - "One or more output arguments not assigned during call to "input_4”是什么意思?

有人可以解释这个 C 输出吗?

c - 使用Linux C select系统调用来监视文件

管道的 C/Unix 编程问题

从 X11 应用程序干净退出?

c - 如何让 C 编译器打印\n

c - 对 `encrypt' 的 undefined reference 和对 `decrypt' 的 undefined reference

循环输入错误后继续