1
18
如果您需要大于32位,可以考虑使用64位整数(long-long),或者使用或编写任意精度的数学库,例如。 GNU MP |
2
5
如果你想滚动你自己的任意精度库,请参阅Knuth的半数值算法,他的代表作第2卷。 |
3
3
事实上,在当今巨大的存储能力下,您可能只需要使用一个字节数组,其中每个字节只包含一个数字(0-9)。然后编写自己的例程,对字节数组进行加法、减法、乘法和除法。 (除法是很难的,但我敢打赌你一定能在某处找到一些代码。)
|
4
1
在C++中没有简单的方法来实现它。您必须使用外部库,例如 GNU Multiprecision ,或使用本机支持任意大整数的其他语言,如Python。 |
5
0
其他的海报也提供了图书馆的链接,可以帮你做到这一点,但看起来你正在尝试将其构建到你的语言中。我的第一个想法是:你确定你需要这样做吗?大多数语言都会像其他语言所建议的那样使用附加库。 假设您正在编写一个编译器,并且确实需要此功能,您可以为汇编中任意大的值实现整数算术函数。 例如,一个简单的(但不是最佳的)实现将数字表示为二进制编码的十进制。算术函数可以使用与你用铅笔和纸做数学时相同的算法。 另外,考虑对这些大整数使用专门的数据类型。这样,“正常”整数就可以使用标准的32位算术。 |
6
0
我更喜欢的方法是将我当前的int类型用于32位int(或者在内部将其更改为long long或类似的类型,只要它可以继续使用相同的算法),然后当它溢出时,将其更改为bignum存储,无论是我自己创建的,还是使用外部库。然而,我觉得我需要检查每个算术运算的溢出,大约是算术运算开销的2倍。我怎么解决这个问题? |
7
0
如果我要实现我自己的语言并且想要支持任意长度的数字,我将使用带有进位/借位概念的目标语言。但是由于没有HLL能够在没有严重性能影响的情况下实现这一点(比如异常),所以我肯定会在汇编中实现它。可能需要一条指令(如x86中的JC)来检查并处理溢出(如x86中的ADC),对于实现任意精度的语言来说,这是可以接受的折衷方案。然后我将使用汇编中编写的一些函数来代替常规运算符,如果您可以利用重载来获得更优雅的输出,甚至更好。但我不认为生成的C++是可维护的(或者意味着要维护)作为目标语言。 或者,只需使用一个比你需要的钟和口哨更多的库,并将其用于所有数字。 作为一种混合方法,检测程序集中的溢出并在溢出时调用库函数,而不是滚动自己的迷你库。 |
rookie · 检查函数模板的所有参数包参数是否属于int 1 年前 |
ivaigult · -W转换和隐式字符串到布尔类型转换 1 年前 |
rainer · 后台插入程序的初始化 1 年前 |
Community wiki · 以理智、安全和高效的方式复制文件 1 年前 |
Shefali Kanaujia · 对C中向量的向量进行排序++ 1 年前 |
Ma Joonyoung · 粗粒度和细粒度链表的时间比较 1 年前 |