标签: biginteger

在Perl模块中检查无穷大的最佳方法是什么?

在我的一个模块中,我必须处理无限的概念.到目前为止,我一直在使用9**9**9正无穷大,这似乎运作良好,速度快,似乎是perl的内部用作无限.

但是,如果我的模块的用户决定使用其中一个大数字模块(例如use bigint;),然后他们使用infMath::BigInt->binf()表示无穷大,事情会有点冒险.

在某些地方它似乎工作正常,但在其他地方,比较应该是真的或应该是错误的最终错误的方式导致难以追踪错误.

我想支持无限的其他各种概念,它们可以使用普通的perl数和任意精度数.

但我也对性能表示担忧,因为我对无穷大的一些比较发生在紧密的内环中.显然,inffrom Math::BigInt会慢于9**9**9(由于在每次访问时调用绑定或重载方法).过去有没有人处理过这个问题?如果是这样,你的解决方案是什么?

我已经考虑过将自己的常量用于无穷大,定义如下:

use constant INF => if_any_bignum_modules_loaded() 
                    ? Math::BigInt->binf 
                    : 9**9**9;
Run Code Online (Sandbox Code Playgroud)

然后向我的模块添加警告,首先应该加载任何bignum模块.这听起来合情合理吗?是否有可靠的实施if_any_bignum...,或者我应该自己推出?

perl module biginteger bignum infinity

13
推荐指数
1
解决办法
659
查看次数

获取5 ^ 1234566789893943的最后1000位数字

我在一些在线论坛上看到了以下面试问题.对此有什么好的解决方案?

获取5 ^ 1234566789893943的最后1000位数字

algorithm biginteger modular-arithmetic

13
推荐指数
2
解决办法
626
查看次数

Java比较整数和bigInteger

如何比较的intBigInteger在Java中?我特别需要知道a int是否小于a BigInteger.这是我正在使用的代码:

private static BigInteger two = new BigInteger("2");
private static BigInteger three = new BigInteger("3");
private static BigInteger zero = new BigInteger("0");    
public static BigInteger bigIntSqRootCeil(BigInteger x) throws IllegalArgumentException {
    if (x.compareTo(BigInteger.ZERO) < 0) {
        throw new IllegalArgumentException("Negative argument.");
    }
    if (x == BigInteger.ZERO || x == BigInteger.ONE) {
        return x;
    }
    BigInteger two = BigInteger.valueOf(2L);
    BigInteger y;
    for (y = x.divide(two);
            y.compareTo(x.divide(y)) > 0;
            y = ((x.divide(y)).add(y)).divide(two));
    if (x.compareTo(y.multiply(y)) == 0) …
Run Code Online (Sandbox Code Playgroud)

java biginteger bigint

13
推荐指数
2
解决办法
2万
查看次数

C#随机BigInt生成器

我即将实施DSA算法,但是存在一个问题:

选择"p",一个带L位的素数,其中512 <= L <= 1024,L是64的倍数

如何实现该数字的随机生成器?Int64具有"仅"63位长度.

c# biginteger dsa

12
推荐指数
1
解决办法
8237
查看次数

PHP中的任意精度数学

我目前正试图弄清楚如何使用PHP中的任意精度数字.所以我想我的第一个问题是究竟什么是任意精度数学.我试着谷歌搜索一个很好的定义,但由于某种原因,没有人可以用简单的语言.

其次,PHP中的BCMath和GMP库有什么区别?我听说GMP的API是"更新鲜",但是我很高兴.一个更好吗?

我最后的问题是BCMath/GMP需要什么类型的数字.显然它需要字符串形式的正常整数(例如"5.34"),但我已经看到BCMath函数直接用于表示常规整数的八位字节字符串的实现(例如"\ x12\x23\x45\x67"),其中我听说被称为"bigint",但谷歌再也没有给我带来任何好处.

php biginteger gmp bcmath arbitrary-precision

12
推荐指数
2
解决办法
3797
查看次数

PHP:如何将bigint从int转换为string?

我希望能够将大的int转换为完整的字符串派生词.

例如.

$bigint = 9999999999999999999;
$bigint_string = (string) $bigint;
var_dump($bigint_string);
Run Code Online (Sandbox Code Playgroud)

输出

string(7) "1.0e+19"
Run Code Online (Sandbox Code Playgroud)

但是我需要

string(19) "9999999999999999999"
Run Code Online (Sandbox Code Playgroud)

请不要告诉我,我最初应该将$ bigint值设置为字符串.这不是一种选择.我真的被卡住了,不知道它是否可能?

php string biginteger

12
推荐指数
1
解决办法
2万
查看次数

php:int()函数等效于bigint类型?(int()将字符串剪切为2147483647)

php:int()bigint类型的等效函数是什么?(int()削减大数到2147483647)?

例:

$bigint1="12312342306A_C243";
$bigint1=(int)$bigint1;//2147483647
Run Code Online (Sandbox Code Playgroud)

但我希望它是12312342306.

php int integer function biginteger

12
推荐指数
3
解决办法
3万
查看次数

java中BigInteger的%运算符

如何使用a%b大整数?喜欢

...
BigInteger val = new BigInteger("1254789363254125");
...

boolean odd(val){
   if(val%2!=0)
      return true;
   return false;
...
Run Code Online (Sandbox Code Playgroud)

Eclipse表示,对于BigInteger,运算符%未定义.

有任何想法吗?

java biginteger

12
推荐指数
2
解决办法
2万
查看次数

有效地计算产品a*b**2*c**3 ....

什么是计算产品的最有效方法

a 1 b 2 c 3 d 4 e 5 ...

假设平方成本大约是乘法的一半?操作数的数量小于100.

是否有一个简单的算法,因为乘法时间与操作数长度的平方成正比(如同java.math.BigInteger)?


第一个(也是唯一的)答案是完美的操作次数.

有趣的是,当应用于相当大BigInteger的时候,这部分根本不重要.即使没有任何优化的情况下计算abbcccddddeeeee也需要大约相同的时间.

大部分时间花在最后的乘法上(BigInteger没有实现像Karatsuba,Toom-Cook或FFT这样的更智能的算法,因此时间是二次的).重要的是确保中间被乘数大约是相同的大小,即给定大小相同的p,q,r,s,计算(pq)(rs)通常比((pq)r)s快.对于几十个操作数,速度比似乎约为1:2.

java math biginteger arbitrary-precision

12
推荐指数
1
解决办法
273
查看次数

将"大"十六进制数字(字符串格式)转换为十进制数字(字符串格式),不带BigInteger类

如何转换"大"十六进制数字(字符串格式):

EC851A69B8ACD843164E10CFF70CF9E86DC2FEE3CF6F374B43C854E3342A2F1AC3E30C741CC41E679DF6D07CE6FA3A66083EC9B8C8BF3AF05D8BDBB0AA6CB3EF8C5BAA2A5E531BA9E28592F99E0FE4F95169A6C63F635D0197E325C5EC76219B907E4EBDCD401FB1986E4E3CA661FF73E7E2B8FD9988E753B7042B2BBCA76679

到十进制数字(字符串格式):

166089946137986168535368849184301740204613753693156360462575217560130904921953976324839782808018277000296027060873747803291797869684516494894741699267674246881622658654267131250470956587908385447044319923040838072975636163137212887824248575510341104029461758594855159174329892125993844566497176102668262139513

不使用BigIntegerClass(因为我的应用程序应该支持没有.NET Framework 4的机器)?

c# hex base biginteger

12
推荐指数
1
解决办法
4276
查看次数