在javascript中,我想用以下方法创建一个大型布尔数组(54个元素)的二进制哈希:
function bhash(arr) {
for (var i = 0, L = arr.length, sum = 0; i < L; sum += Math.pow(2,i)*arr[i++]);
return sum;
}
Run Code Online (Sandbox Code Playgroud)
简而言之:它创建了一个最小的整数来存储一个布尔数组.现在我的问题是javascript显然使用浮点数作为默认值.我必须创建的最大数量是2 ^ 54-1但是一旦javascript达到2 ^ 53,它就会开始做奇怪的事情:
9007199254740992+1 = 9007199254740994
Run Code Online (Sandbox Code Playgroud)
有没有办法在javascript中使用整数而不是浮点数?还是大整数求和?
我正在玩Java中的数字,想看看我能做多少.我的理解是BigInteger可以容纳一些无限大小,只要我的计算机有足够的内存来容纳这样的数字,对吗?
我的问题是BigInteger.pow只接受一个int,而不是另一个BigInteger,这意味着我只能使用一个最多2,147,483,647的数字作为指数.是否可以使用BigInteger类?
BigInteger.pow(BigInteger)
Run Code Online (Sandbox Code Playgroud)
谢谢.
我们可以将Biginteger转换为二进制字符串
String s1 = "0011111111101111111111111100101101111100110000001011111000010100";
String s2 = "0011111111100000110011001100110011001100110011001100110011001100";
BigInteger bi1, bi2, bi3;
bi1 = new BigInteger(s1,2);
bi2 = new BigInteger(s2,2);
bi3 = bi1.xor(bi2);
Run Code Online (Sandbox Code Playgroud)
如何将bi3转换为二进制字符串
在C++中处理大型数字输入的最佳方法是什么(例如10^100)?
对于算法,我通常切换到ruby,有时我会使用字符串.
还有其他好方法吗?
我正在创建自己的BigInt类,通过将数字分成7位数.(即基数10,000,000)
我实现了加法,减法和乘法,现在我正在实现除法和mod.我编写了一个代码,通过长除法进行除法(通过除以最高有效数字来估算数字),并且它有效.
但是,它太慢了.当我测试108位数和67位数的运算时,计算除法需要1.9ms,比其他运算慢得多(计算加法/减法0.007~0.008ms,计算乘法0.1ms).
与用于快速乘法的Karatsuba和FFT算法一样,存在用于计算除法的算法?维基百科演示了一些除法算法(计算除数的乘法逆,并将其乘以除数),但我认为这对我实施除法没有多大帮助.我也阅读了"大整数方法"部分,但这对我也没有帮助...... :(
是否有一个非常大的变量类型我可以在Java中用来存储大量数字(最多四十位数)?
long最大值是9223372036854775807,这是19位数 - 不够大.
我正在尝试创建一个可以处理大数字的计算器,因为现在大多数只能保持不到10位左右的数字,而且我希望得到精确计算的数字更大的数字
编辑
谢谢你的回答.我可以BigInteger用于大整数,唯一的限制是计算机的内存(应该足够).对于小数,我将使用float^ e,如@WebDaldo建议,或者BigDecimal(类似于BigInteger),如@kocko建议的那样.
我试图比较一个BigInteger(base)的值是否>另一个BigInteger(prime)的值,以及'a'的值是否不等于1.如果a的值不是1,它应该突破循环.我该如何比较它们?
Random ran = new Random();
BigInteger prime = new BigInteger(16,ran);
BigInteger base,a,one;
one = new BigInteger("1");
for (int i = 0; i < 65535; i++){
while (base>prime){
base = new BigInteger(16,ran);
}
a = base.modPow(prime.subtract(one),prime);
System.out.println("a: "+a);
if (a != one){
break;
}
}
Run Code Online (Sandbox Code Playgroud) xrange 函数不适用于大整数:
>>> N = 10**100
>>> xrange(N)
Traceback (most recent call last):
...
OverflowError: long int too large to convert to int
>>> xrange(N, N+10)
Traceback (most recent call last):
...
OverflowError: long int too large to convert to int
Run Code Online (Sandbox Code Playgroud)
Python 3.x:
>>> N = 10**100
>>> r = range(N)
>>> r = range(N, N+10)
>>> len(r)
10
Run Code Online (Sandbox Code Playgroud)
range()Python 2.x 有py3k内置函数的后端吗?
我正在寻找一个完整的"懒惰"实现range(),而不只是部分实现它的一些功能.
我看了一遍,但无法弄清楚这一点.你如何总结BigIntegers的列表?
Using System.Numerics;
Using System.Linq;
List<BigInteger> bigInts = new List<BigInteger>();
BigInteger sum = bigInts.Sum(); // doesn't work
BigInteger sum = bigInts.Sum<BigInteger>(); // doesn't work
BigInteger sum = bigInts.Sum(x => x); // doesn't work
Run Code Online (Sandbox Code Playgroud)
你必须这样做吗?
BigInteger sum = new BigInteger(0);
foreach(BigInteger bigint in bigInts)
sum += bigint;
Run Code Online (Sandbox Code Playgroud) biginteger ×10
java ×4
javascript ×2
algorithm ×1
bigdecimal ×1
c# ×1
c++ ×1
go ×1
largenumber ×1
math ×1
pow ×1
python ×1
python-3.x ×1
range ×1
sum ×1
syntax ×1
xrange ×1