存储在双精度中的大于2^53的正整数的最大精度误差是多少?换句话说,对于从2^53 1到max(double)的所有正整数,实际整数和双精度值之间的最大精度差是多少。
我问这个问题的一点背景:我正在从pubsub读取SNMP计数器,并将它们写入BigQuery。计数器是UINT64,但BigQuery的整数数据类型是INT64。因此,我目前在BQ模式中使用浮点。对于我的用例来说,如果计数器关闭了数百个值,这不会是一个问题。除非在BQ方面有另一种选择(不涉及使用字符串!)
浮点数之间的差距随着数字变大而增加。
关于整个双精度浮点数范围:
关于高达 264 的双精度浮点数范围:
2018更新:BigQuery现在有了数值类型。
从我目前收集的信息来看:
从历史上看,Java没有处理过UINT64,并且有一些方法可以解决这个问题:https://www.nayuki.io/page/unsigned-int-considered-harmful-for-java
很想知道哪些情况不能用这些变通方法处理!
在大查询中:
#legacySQL
SELECT 9223372036854775818
-9223372036854775798
#legacySQL
SELECT 9223372036854775807
9223372036854775807
#legacySQL
SELECT 9223372036854775818 - 9223372036854775807
11
编辑:在评论中进行了一些讨论后,发现由于幸运地了解了浮点数是如何在C中实现的,我问了一些与我想问的不同的东西。 我想使用比更大的整数(对我来说是8个字节)(对我来说是8个字节),可能不会重复出现在数组或bigint库中。由于我的是16个字节,我认为只需切换类型就可以了。结果表明,即使可以表示更大的整数,你也不能在不失去精度的情况下进行操作——用这些更大的整数。所以不可能实现我想做的事情。实际上,正
这是对前段时间已经回答的问题的进一步澄清:可以存储在双精度中的最大整数 顶部答案提到“最大整数,以便它和所有较小的整数都可以存储在IEEE 64位双精度中而不会失去精度。IEEE 64位双精度有52位尾数,所以我认为它是2^53: 因为: > < li> 253 1无法存储,因为开头的1和结尾的1之间有太多的零。 任何小于 2 53 的东西都可以存储,其中52 位明确存储在尾数中,然后指数实际上给
问题内容: 我试图确定双精度的最大精度是多少。在此链接的可接受答案的注释中,Java中的double保持精度 @PeterLawrey将max precision设置为15。 您如何确定呢? 问题答案: @PeterLawrey表示最大精度为15。 实际上,这根本不是他所说的。他说的是: 双精度有15个小数位 他错了。它们的精度为15个十进制 数字 。 任何数字中的小数位数由其对数10的对数给出。
我试图确定double的最大精度是多少。在这个链接中接受的答案的注释中,Java中的Retain precision with double@PeterLawrey声明max precision In 15。 你如何确定这一点?
我想要得到一个特定位置附近的所有商店,但似乎我有一个查询字符串的问题。我已经检查了postgis的版本是PostGIS2.5.2_2。我也检查过,看看经度和纬度是否有双精度。 我尝试将查询重写到不同的查询字符串中,但仍然得到相同的错误。 我的实体: 我的存储库接口: 在postgres数据库中工作,但在java应用程序中,它返回一个错误: psqlException:error:“:”处或附近的语
当我试图从Spark dataframe收集数据时,我得到一个错误,说明 下面是StackTrace: 警告tasksetmanager:在stage 0.0中丢失任务1.0(TID 1,10..***,executor 0):java.lang.IllegalArgumentException:requirement:Decimal precision 39在scala.predef超过最大精度