为什么有些数字在作为浮点数存储时会失去准确性? 例如,十进制数9.2可以精确地表示为两个十进制整数( 92/10 )的比率,二者都可以精确地以二进制表示( 0b1011100/0b1010 )。 但是,存储为浮点数的相同比率绝不等于9.2 : 32-bit "single precision" float: 9.19999980926513671875 64-bit "double precision" float: 9.199999999999999289457264239899814128875732421875 这样一个明显简单的数字如何能够在64位内存中“太大”expression?
下面的代码显然是错误的。 有什么问题? i <- 0.1 i <- i + 0.05 i ## [1] 0.15 if(i==0.15) cat("i equals 0.15") else cat("i does not equal 0.15") ## i does not equal 0.15
0.1 + 0.2 == 0.3 -> false 0.1 + 0.2 -> 0.30000000000000004 为什么会发生?