为什么我的处理器没有内置的BigInt支持?

ol.*_*ol. 10 processor biginteger cpu-architecture

据我所知,BigInts通常在大多数编程语言中实现为包含数字的数组,例如:当添加其中两个时,每个数字都是一个接一个地添加,就像我们从学校知道的那样,例如:

 246
 816
 * *
----
1062
Run Code Online (Sandbox Code Playgroud)

其中*表示存在溢出.我在学校这样学习,所有BigInt添加函数我已经实现了类似于上面例子的工作.

所以我们都知道我们的处理器只能本地管理从0到2^32/的整数2^64.

这意味着大多数脚本语言为了高级并提供具有大整数的算术,必须实现/使用BigInt库,这些库使用整数作为上面的数组.但当然这意味着它们将比处理器慢得多.

所以我问自己的是:

  • 为什么我的处理器没有内置的BigInt功能?

它可以像任何其他BigInt库一样工作,只是(很多)更快,更低一级:处理器从缓存/ RAM中取一个数字,添加它,然后再将结果写回来.

对我来说似乎是一个好主意,为什么不是那样的?

Mic*_*sen 9

有太多的问题需要处理器处理大量的东西而不是它的工作.

假设处理器DID具有该功能.我们可以设计一个系统,我们知道给定BigInt使用了多少字节 - 只需使用与大多数字符串库相同的原理并记录长度.

但是如果BigInt操作的结果超出了保留的空间量会发生什么?

有两种选择:

  1. 它会在它所拥有的空间内或周围环绕
  2. 它会占用更多内存.

问题是,如果它确实1),那么它是无用的 - 你必须事先知道需要多少空间,这就是你想要使用BigInt的部分原因 - 所以你不受那些限制的东西.

如果它确实2),那么它将不得不以某种方式分配该内存.内存分配不是以相同的方式在操作系统上完成,但即使它是,它仍然必须更新所有指向旧值的指针.它如何知道什么是指向该值的指针,以及只是包含与所讨论的内存地址相同的值的整数值?


dth*_*rpe 8

二进制编码的十进制是字符串数学的一种形式.英特尔x86处理器具有直接BCD关节操作的操作码.

  • @mmyers:OP并没有问它是否受欢迎.:P BCD用于定点数学的金融应用程序,以避免精度/舍入误差的丢失. (3认同)
  • http://teck.in/year-2016-y2k16-computer-bug-hits-texting-in-us-and-banking-in-australia.html (2认同)
  • 提及+1.另外,有趣的是(或没有),IEEE-754定义了二进制和十进制基数变体.http://en.wikipedia.org/wiki/IEEE_754-2008. (2认同)