这里的问题基于我从“我读书”这本书中所理解的内容。希望有人能理解我粗略的想法:
1)假设我们有64位。每个位都是0或1.因此64位只能有64个点来存储0
或1
s。但10 ^ 380是一个非常长(和巨大的数字)。我们需要380个点来记下10 ^ 380,即10 ... 000。那怎么可能计算机存储这个号码?我完全迷失在这里。
2)" UINT64"数据类型意味着计算机需要64位来存储这样的数字。它可以存储的这种类型的最大整数是2 ^ 64 - 1.比较" double",它还使用64位来存储分数。然而,它可以存储的最大数量是1.79x10 ^ 380。与^ 2 64相比,10 ^ 380是非常大的数字。怎么会这样?我的意思是为什么我们不扔掉(字面意思掉掉)" uint64"因为它使用了相同数量的内存,如" double"并且可以存储更大的数字。
除非我在这里疯狂,或误解某事,否则有人请帮忙解释一下。谢谢!
P.s。:请不要指引我任何"太普通"链接,例如https://en.wikipedia.org/wiki/IEEE_floating_point。在发布我的问题之前,我已经阅读了很多网站。我需要一些易于理解的答案。
答案 0 :(得分:0)
双人可能存储的最大数字是1.79x10 ^ 380。但是双倍或浮动缺乏准确性。为简单起见,假设一个double或float由2个部分组成,让我们说A和B在哪里:
double_number = A*2^B
如果考虑一下,A的位数加上B中的位数必须是常量。因此,如果要存储更大的数字,则增加B的位数。但是,A的位数较少,这意味着精度较低。所以UInt64当然不会被抛弃,因为它对整数精度很有效。但是double可以存储与UInt64的最大数量相同的数字,但不能达到相同的精度。也许你可以看一下:https://en.wikipedia.org/wiki/Fixed-point_arithmetic