Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何计算大指数?_C#_Vb.net - Fatal编程技术网

C# 如何计算大指数?

C# 如何计算大指数?,c#,vb.net,C#,Vb.net,如何计算一个非常大的幂数?例如,10000000000000000power中的某些数字对于超出Int64范围的大数字,.NET具有类,该类“表示任意大的有符号整数”。当然,实际上,biginger可以表示的值受可用系统内存和CLR分配所有内存的能力的约束 理论上,您可以这样做,但实际上,在进入biginger.Pow(value,int.MaxValue)之前,很可能会耗尽内存 请注意,由于第二个参数biginger.Pow采用常规的int,因此需要两个(或更多)调用来计算大于int范围的幂

如何计算一个非常大的幂数?例如,
10000000000000000
power

中的某些数字对于超出
Int64
范围的大数字,.NET具有类,该类“表示任意大的有符号整数”。当然,实际上,
biginger
可以表示的值受可用系统内存和CLR分配所有内存的能力的约束

理论上,您可以这样做,但实际上,在进入
biginger.Pow(value,int.MaxValue)
之前,很可能会耗尽内存

请注意,由于第二个参数
biginger.Pow
采用常规的
int
,因此需要两个(或更多)调用来计算大于
int
范围的幂

也就是说,理解使用
biginger
的运算比使用常规数值类型的数学运算要慢得多也很重要,因此,你应该仔细考虑你的总体目标是什么,是否有一种方法来实现它而不诉诸使用<代码> BigInteger <代码> .< /P> < P>没有C类型的数据类型可以存储像POW(value,100000000000000000)这样的值(除非值是1:P)
即使是BigInteger也不能存储这么大的数字。

你是通过数学计算出来的,所以你一定是在问别的问题。你现在计算它有什么问题?问题是你不知道如何存储这么大的数字?你不知道如何快速计算吗?或者是别的什么东西阻止了你?你需要答案的第一个
n
位数和总位数吗?如果您需要所有数字的精确输出,则由于数字太多而无法实现。“不可能”有点夸张。唯一真正的限制是存储答案的内存,而不是计算复杂性。如果有足够的资金,当然有可能建立一个能够存储
2^(10^18)
@Jason Watkins结果的数据中心,实际上它不仅是一个限制实际解决方案的内存,而且还限制了时间。例如,循环10^18个数字需要数年才能输出数字,因为我认为不存在这样的数据中心。这是行不通的。结果太长,无法存储在内存中。您将获得
System.OutOfMemoryException
@IvanGritsenko,这不取决于输入吗?如果输入相对较小,那么输出将较大,但决不是不可管理的。你是对的,但它只适用于
value=1
@IvanGritsenko。你确定吗?“你有什么证据证明这一点?”伊万,不过,我认为这是回答一般问题的最佳答案。我不认为
10000000000000000
是一个特定的值,而是一个“大”值。也就是说,我很好奇你是否自己测试过它?我现在只能访问dotnetfiddle。我想知道对于一个拥有16gb内存的无约束64位系统来说,
2^n
的限制是什么?从技术上讲,他可以编写自己的类型,然后给予足够的时间和计算能力,他可以正确处理它?@KevinWells从技术上讲,你是对的。但是最终结果应该存储为一系列字符(可能像一个字符串),如果没有这个公式的方法,它是如何在计算器窗口中编程的????
var value = new BigInteger(x);
var result = BigInteger.Pow(value, 1000000000);
result = BigInteger.Pow(result, 1000000000);