存在于double中的大于2 ^ 53的正整数上的最大精度误差是多少? 换句话说,对于从2 ^ 53 + 1到max(double)的所有正整数,实际整数与double值之间的最大精度差异将是什么。
关于我为什么问的一个小背景: 我正在从pubsub读取SNMP计数器并将它们写入BigQuery。计数器是UINT64,但BigQuery的整数数据类型是INT64。所以我目前在我的BQ架构中使用FLOAT。如果计数器在数百个值中偏离了一些值,那对我的用例来说不会有问题。除非在BQ方面有另一种选择(不涉及使用字符串!)
答案 0 :(得分:1)
2018更新:BigQuery现在具有NUMERIC类型。
从我到目前为止收集到的内容:
从历史上看,Java还没有处理UINT64,并且有记录的解决方法:https://www.nayuki.io/page/unsigned-int-considered-harmful-for-java
知道用这些变通办法处理哪些案例会很有趣!
在BigQuery中:
#legacySQL
SELECT 9223372036854775818
-9223372036854775798
#legacySQL
SELECT 9223372036854775807
9223372036854775807
#legacySQL
SELECT 9223372036854775818 - 9223372036854775807
11
答案 1 :(得分:1)
随着数字变大,浮点数之间的差距也会增大。
关于整个双精度浮点数范围:
关于双精度浮点数的范围,最多2 64 :