Types 存储为双精度的大于2^53的整数的最大精度错误-如何在BigQuery中存储UINT64
存储在double中大于2^53的正整数的最大精度错误是什么? 换句话说,对于从2^53+1到max(double)的所有正整数,实际整数与double值之间的最大精度差是多少 关于我为什么这么问的一些背景知识:Types 存储为双精度的大于2^53的整数的最大精度错误-如何在BigQuery中存储UINT64,types,integer,double,google-bigquery,Types,Integer,Double,Google Bigquery,存储在double中大于2^53的正整数的最大精度错误是什么? 换句话说,对于从2^53+1到max(double)的所有正整数,实际整数与double值之间的最大精度差是多少 关于我为什么这么问的一些背景知识: 我正在从pubsub读取SNMP计数器并将其写入BigQuery。计数器为UINT64,但整数的BigQuery数据类型为INT64。所以我现在在我的BQ模式中使用FLOAT。对于我的用例来说,如果计数器被关闭了数百个值,这将不会是一个问题。除非在BQ端有另一种选择(不涉及使用字符串!
我正在从pubsub读取SNMP计数器并将其写入BigQuery。计数器为UINT64,但整数的BigQuery数据类型为INT64。所以我现在在我的BQ模式中使用FLOAT。对于我的用例来说,如果计数器被关闭了数百个值,这将不会是一个问题。除非在BQ端有另一种选择(不涉及使用字符串!)2018更新:BigQuery现在具有数字类型
根据我目前收集的信息:
- 您应该能够将UINT64存储为INT64,而不会丢失任何精度
- 64位值的算术运算不取决于它们被解释为有符号还是无符号(除法和模除外)李>
- 比较:代替(A>B),你可以做(A-B>0)
#legacySQL
SELECT 9223372036854775818
-9223372036854775798
#legacySQL
SELECT 9223372036854775807
9223372036854775807
#legacySQL
SELECT 9223372036854775818 - 9223372036854775807
11
2018更新:BigQuery现在具有数字类型
根据我目前收集的信息:
- 您应该能够将UINT64存储为INT64,而不会丢失任何精度
- 64位值的算术运算不取决于它们被解释为有符号还是无符号(除法和模除外)李>
- 比较:代替(A>B),你可以做(A-B>0)
#legacySQL
SELECT 9223372036854775818
-9223372036854775798
#legacySQL
SELECT 9223372036854775807
9223372036854775807
#legacySQL
SELECT 9223372036854775818 - 9223372036854775807
11
浮点数之间的差距随着数字变大而增大 关于双精度浮点数的整个范围:
- 最大有限值为(2− 2.−52)×21023(约1.8×10308)
- 第二大值为(2)− 2.−51)×21023
- 其差值为2971(约2.0×10292)
- 因此,通过四舍五入到最近值,最大误差是步长的一半,因此您的问题的答案是2970(约1.0×10292)
- 264可以在DP FP中精确表示
- 先前(较小)的数字是18446744073709549568
- 他们的差距是2048年
- 因此,当将uint64转换为浮点64时,最大舍入误差为±1024
- 最大有限值为(2− 2.−52)×21023(约1.8×10308)
- 第二大值为(2)− 2.−51)×21023
- 其差值为2971(约2.0×10292)
- 因此,通过四舍五入到最近值,最大误差是步长的一半,因此您的问题的答案是2970(约1.0×10292)
- 264可以在DP FP中精确表示
- 先前(较小)的数字是18446744073709549568
- 他们的差距是2048年
- 因此,当将uint64转换为浮点64时,最大舍入误差为±1024