【发布时间】:2018-09-10 04:33:02
【问题描述】:
我认为浮点精度是 7 个小数位/数字(包括整数和小数部分) - 这里我的意思是 base10 7 个数字 - 我可以在我的代码编辑器中的浮点文字中键入这 7 个数字。这意味着如果我在两个数字中有 7 个有效数字(小数点前后),这两个数字将始终不同。
但正如我所见,两个有效数字为 7 位的数字有时不同,有时相同!!!
1) 我哪里错了?
2) 下面例子中的模式和原理是什么?为什么相同的 7 位精度组合有时被视为不同,而其他时候则被视为相同?
float f01 = 90.000_001f;
float f02 = 90.000_002f; // f01 == f02 is TRUE ! (CORRECT RESULT)
float f03 = 90.000_001f;
float f04 = 90.000_003f; // f03 == f04 is TRUE ! (CORRECT RESULT)
float f1 = 90.000_001f;
float f2 = 90.000_004f; // FALSE (INCORRECT RESULT)
float f3 = 90.000_002f;
float f4 = 90.000_009f; // FALSE (INCORRECT RESULT)
float f5 = 90.000_009f;
float f6 = 90.000_000f; // FALSE (INCORRECT RESULT)
float f7 = 90.000_001f;
float f8 = 90.000_009f; // FALSE (INCORRECT RESULT)
【问题讨论】:
-
任何关于有效小数位数的规则都只是粗略的经验法则。
标签: java floating-point precision