【问题标题】:How does Ruby store large numbers? [duplicate]Ruby 如何存储大量数字? [复制]
【发布时间】:2015-01-14 14:57:19
【问题描述】:

Ruby 可以存储非常大的数字。现在想来,我什至不知道这怎么可能。

计算机以一系列两位数(0 和 1)存储数据。这被称为二进制表示法。但是,它们可以存储的数字大小是有限的。

如今,大多数当前操作系统都以 64 位运行。这意味着变量的最高可分配地址空间是 64 位。

整数存储在以 2 为底的系统中,这意味着计算机应该能够存储的最高值是

1111111111111111111111111111111111111111111111111111111111111111

由于计算机只能读取 2 个可能的值,这意味着上面的数字可以表示为

2 ^ 64

这意味着一个整数可以读取的最大值最多应该是 18,446,744,073,709,551,615

老实说,我什至不明白如何存储比这更高的整数值。

【问题讨论】:

  • 你了解如何在内存中存储大于 64 字节的二进制文件吗?现在想象一下,该文件包含一个非常大的整数的二进制值......
  • 简单,它不仅仅依赖于 64 位。虽然我不打算深入细节(因为我没有完全理解它们),但您想看看 BigNum 和 BigDecimal。 ruby-doc.org/stdlib-1.9.3/libdoc/bigdecimal/rdoc/…ruby-doc.org/core-1.9.3/Bignum.html
  • 如何用 10 根手指存储大量数字?

标签: ruby binary integer 64-bit largenumber


【解决方案1】:

Ruby 使用Bignum 对象来存储大于2^64 的数字。你可以看here这是如何工作的描述:

在左侧,您可以看到 RBignum 包含一个名为 RBasic,包含所有 Ruby 使用的内部技术值 对象。下面我显示特定于 Bignum 对象的值:数字 和伦。数字是指向包含 32 位值数组的指针 实际大整数的位分组为 32 组。 len 记录如何 许多 32 位组位于数字数组中。由于可以有任何 数字数组中的组数,Ruby 可以任意表示 使用 RBignum 的大整数。

【讨论】:

  • 有趣的解释。我听说过 Bignum 类,并且知道 Ruby 可以存储非常大的数字。但不确定它实际上是如何做到的。非常感谢您的解释。
  • 如果需要,它们是否会在某个时间点相加?我的意思是数字的值。此外,这些数组是否已预设(因为这些值都已经存在,例如 3040492174021840921480921480 和 21409824190842190489281)但在位码中?就像我想我理解的那样,但我想它们在创建时会被创建为对象。我认为让我感到困惑的词是“实际”
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-07-15
  • 2018-07-18
  • 2016-12-15
  • 2014-03-05
  • 1970-01-01
  • 2019-07-19
相关资源
最近更新 更多