这是对前段时间已经回答的问题的进一步澄清:可以存储在双精度中的最大整数
顶部答案提到“最大整数,以便它和所有较小的整数都可以存储在IEEE 64位双精度中而不会失去精度。IEEE 64位双精度有52位尾数,所以我认为它是2^53:
因为:
> < li>
253 1无法存储,因为开头的1和结尾的1之间有太多的零。
任何小于 2 53 的东西都可以存储,其中52 位明确存储在尾数中,然后指数实际上给你另一个。
253显然可以存储,因为它是2的小幂。
有人能澄清第一点吗?他那是什么意思?他是不是在说,例如,如果它是一个4位数字10000001,你不能用4位存储它?253只是第一位1,其余的0是对的?为什么你不能在不失精度的情况下加1?
还有,“最大的整数,使得它和所有更小的整数都可以存储在IEEE中”。如果我想找到最大的n位整数,这样它和所有更小的整数都可以存储在IEEE中,是否有一些通用规则,我可以简单地说它是2n?例如,如果我要找出最大的4位整数,这样它和它下面的所有整数都可以被表示,它将是2^4?
例如,他说的是如果它是一个 4 位数字 1000 0001,你不能用 4 位存储它吗?
不,他是说你不能把它存储在3位中。使用通常的二进制表示法。
253只是第一位1,其余的0是对的?
是的,还有1,2,4,…,253,254,255,…,2123,2124,…还有0.125。
这是我们正在谈论的浮点。253只是一个隐式1,所有显式有效位都是0,是的,但它不是唯一具有此属性的数字。关键的性质是表示253的ULP是2。因此,253可以表示为在范围内的2的所有幂,而253 1则不能,因为ULP在该邻域内太大。
此外,“最大的整数,以便它和所有较小的整数可以存储在IEEE中”。如果我想找到最大的n位整数,以便它和所有较小的整数都可以存储在IEEE中,那么我是否可以简单地说它是2n?
是的,在二进制IEEE 754浮点中,所有“最大的整数,以便它和所有较小的整数都可以存储”都是2的幂,特别是2n,其中n是有效数的宽度(计算隐式位)。
编辑:在评论中进行了一些讨论后,发现由于幸运地了解了浮点数是如何在C中实现的,我问了一些与我想问的不同的东西。 我想使用比更大的整数(对我来说是8个字节)(对我来说是8个字节),可能不会重复出现在数组或bigint库中。由于我的是16个字节,我认为只需切换类型就可以了。结果表明,即使可以表示更大的整数,你也不能在不失去精度的情况下进行操作——用这些更大的整数。所以不可能实现我想做的事情。实际上,正
存储在双精度中的大于2^53的正整数的最大精度误差是多少?换句话说,对于从2^53 1到max(double)的所有正整数,实际整数和双精度值之间的最大精度差是多少。 我问这个问题的一点背景:我正在从pubsub读取SNMP计数器,并将它们写入BigQuery。计数器是UINT64,但BigQuery的整数数据类型是INT64。因此,我目前在BQ模式中使用浮点。对于我的用例来说,如果计数器关闭了数
问题内容: 我有一些现在大于INT可以处理的数字。 这有点令人尴尬,但老实说我不确切知道BIGINT(8)的含义。8是最大位值还是最大长度? 那么BIGINT(1)只能是一位数字吗?还是BIGINT(1)还有其他东西?我认为tinyint(1)最大值为127,如何计算出来? 我能做的最大的事情是什么?我可以在mysql中存储为整数的最大数字是多少? 问题答案: 数字代表它的显示方式-不会影响数据的
问题内容: 为什么会收到错误,我该如何解决? 如您所见,在声明变量时,我已经尝试过用顶部附近的位置进行替换,但是似乎并没有完成任务。 问题答案: 更改使用数组索引从double到INT所有变量(即变量,,)。数组索引是整数。
问题内容: 我试图确定双精度的最大精度是多少。在此链接的可接受答案的注释中,Java中的double保持精度 @PeterLawrey将max precision设置为15。 您如何确定呢? 问题答案: @PeterLawrey表示最大精度为15。 实际上,这根本不是他所说的。他说的是: 双精度有15个小数位 他错了。它们的精度为15个十进制 数字 。 任何数字中的小数位数由其对数10的对数给出。
我试图确定double的最大精度是多少。在这个链接中接受的答案的注释中,Java中的Retain precision with double@PeterLawrey声明max precision In 15。 你如何确定这一点?