我试图了解在 spark 中使用 Float 数据类型投射大量数字的行为。
上图中的最后一个 select 语句给出了非常突然的输出。
提前致谢 !
输出并不突然。它只是对截断浮点表示的限制的演示。FloatType
in Spark 由 Java 的float
32位 IEEE754 浮点数支持。它有 24 位的有效位,但 MSB 始终是1
,因此实际精度只有 23 位。
123456789.6 是 1.8396495223045348... x 2 26。1.8396495223045348 是 1.110101101111001101000101011001... 二进制。将其限制为仅 24 位会导致 1.11010110111100110100011(最后一位向上舍入),即十进制的 1.8396495580673218。将它乘以 2 26得到 123456792。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句