java - 对 float 或 double 值执行重复加法会产生意外结果

标签 java floating-point floating-accuracy

我在我的代码中发现了一个 but,经过一些搜索我意识到我正在执行的一些 float 操作产生了错误的结果。所以我输入了以下循环:

 float f = 0f;
     for(int i =0; i<15; i++){
        f+= 10.1f;
        System.out.println(f);
}

但在结果中我得到了意想不到的额外十进制值:

10.1
20.2
30.300001
40.4
50.5
60.6
70.7
80.799995
90.899994
100.99999
111.09999
121.19999
131.29999
141.4
151.5

这是怎么回事,我该如何预防?

最佳答案

你无法“阻止”它。相反,您需要做的是期待它并进行补偿。

参见:什么 Every Computer Scientist Should Know About Floating-Point Arithmetic

关于java - 对 float 或 double 值执行重复加法会产生意外结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20406141/

相关文章:

c - 将 37.1-28.75 浮点计算正确舍入为 8.4 而不是 8.3

java - 从服务器端调用 javascript 方法

java - 当在父 dependencyManagement 中定义依赖版本时,传递依赖未解决

java - 对象验证

math - float 学有问题吗?

Java更精确的算术

c++ - 为什么 numeric_limits Machine Epsilon 不满足 1+e>1 条件?

java - Twitter4j - 多种语言的 FilterQuery

c++ - 在 64 位处理器上不使用 double(而是使用 float)有什么好处吗?

python减少浮点错误