Tag: bigint

你如何写一个bigint库/ libgmp是如何工作的?

我知道在各种平台上有很多针对C的BigInt库以及如何使用它们但我很感兴趣:它们是如何工作的? 我将如何建立自己的图书馆(我不会尝试,没有必要重新发明轮子,但我对它会如何发生感兴趣)? 任何人都可以指向我可能解释程序/基础知识的教程等吗? 谢谢, Ninefingers。

将大整数转换为十进制字符串

如果将这个问题投票为重复,甚至将其关闭,那么我就有了这个问题。 背景 在“正常”数据类型(如int,long long等等)中,要从二进制数值转换为十进制字符串,您将执行以下操作(在伪代码中): Set length = 0 Set divisor to largest base10 value the data type will hold (Divisor). Loop Divide number in question by divisor. Place result in a string at position length. Increment the length by 1. Divide the divisor by 10. Reverse the string. Print the string. (大多数)任何语言的实际实现都是微不足道的。 问题 我遇到的上述方法的问题是,对于大整数(也称为任意精度算术 ),没有最大的基数10值开始。 […]

如何在内存中表示极大的浮点数?

像GMP这样的任意精度库如何存储内存中表示的极大浮点数? 我想如果你想要计算Pi或Euler的常数来说,你可以为小数位右边的数字分配大量的字节数。 每个字节将存储2个小数位值,并且该数组将是数据结构的成员,其中包含用于存储该值的位数和字节数。 这是怎么回事?

将二进制转换为十进制的最快方法?

我有四个无符号的32位整数,表示无符号的128位整数,以小端序排列: typedef struct { unsigned int part[4]; } bigint_t; 我想将此数字转换为十进制字符串表示forms并将其输出到文件中。 现在,我正在使用bigint_divmod10函数将数字除以10,跟踪余数。 我重复调用这个函数,输出余数作为数字,直到数字为零。 这很慢。 这是最快的方法吗? 如果是这样,有没有一种聪明的方法来实现我没有看到的这个function? 我试过看GMP的get_str.c ,但我发现它非常get_str.c 。 编辑:这是我能够为divmod10函数提出的最快的代码: static unsigned uint128_divmod10(uint128 *value) { unsigned int a = value->word[3]; unsigned int b = value->word[2]; unsigned int c = value->word[1]; unsigned int d = value->word[0]; unsigned int diva = a / 5; unsigned int divb = […]

C或C ++中的大整数

我正在研究一个阶乘程序,当试图找到1000的阶乘时,程序不起作用。我认为大整数是解决方案; 它们是如何工作的? (在C或C ++中)

在C中实现bigint的最简单方法是什么?

我想计算100! 我正在寻找使用C来实现这一目标的最简单方法。我已阅读但未找到具体答案。 如果你必须知道,我在Mac OS X中用Xcode编程。 谢谢!

C中的BigInteger?

在C中处理大数字的最简单方法是什么? 我需要在区域1000 ^ 900中存储值… 有人知道一个简单的方法吗? 真的很感激任何帮助!