相关疑难解决方法(0)

Java中的大数字

我如何在Java中使用极大数字进行计算?

我已经尝试long但最大限度为9223372036854775807,并且当使用整数时,它不能保存足够的数字,因此不够准确,无法满足我的需要.

有没有办法解决?

java integer numbers biginteger

90
推荐指数
5
解决办法
20万
查看次数

如何在不使用java.math.BigInteger的情况下在Java中处理非常大的数字

我怎么去做算术,+ - /*%!,任意大整数而不使用java.math.BigInteger

例如,factorial为90在Java中返回0.我希望能够解决这个问题.

java math integer biginteger

62
推荐指数
1
解决办法
7万
查看次数

最准确的方法是在64位中进行组合乘法除法运算?

对于在32位和64位程序(在Visual C++中)都能工作的64位整数,我能够进行乘法除法运算的最准确方法是什么?(如果溢出,我需要结果mod 2 64.)

(我正在寻找类似MulDiv64的东西,除了这个使用内联汇编,它只适用于32位程序.)

显然,可以投射到double后面,但是我想知道是否有更准确的方法并不太复杂.(即我不是在寻找任意精度的算术库!)

c c++ math visual-c++

22
推荐指数
2
解决办法
4542
查看次数

快速将整数乘以适当的分数而没有浮点或溢出的方法

我的程序经常需要执行以下计算:

鉴于:

  • N是32位整数
  • D是32位整数
  • abs(N)<= abs(D)
  • D!= 0
  • X是任意值的32位整数

找:

  • X * N / D为四舍五入的整数,X缩放为N / D(即10 * 2/3 = 7)

显然我可以直接使用r=x*n/d,但经常会从中溢出x*n。如果我改为这样做,r=x*(n/d)则由于整数除法会除去小数部分,因此我只会得到0或x。然后有,r=x*(float(n)/d)但在这种情况下我不能使用浮点数。

精度会很高,但并不像速度和决定性功能那么关键(总是在给定相同输入的情况下返回相同的值)。

N和D当前已签名,但如果有帮助,我可以解决它们始终未签名的问题。

可以使用任何X值(以及N和D,只要N <= D)的泛型函数是理想的,因为此操作以各种不同的方式使用,但是我也有一个特殊的情况,其中X的值是已知的保持2的幂(准确地说是2048),并且加快特定的调用速度将是一个很大的帮助。

目前,我正在使用64位乘法和除法来完成此操作,以避免溢出(本质上是,int multByProperFraction(int x, int n, int d) { return (__int64)x * n / d; }但是有一些断言和多余的位数摆弄而不是舍入)。

不幸的是,我的探查器报告64位除法函数占用了过多的CPU(这是一个32位应用程序)。我尝试减少执行此计算的频率,但用尽了很多方法,因此,即使有可能,我也在尝试找出一种更快的方法。在X的常数为2048的特定情况下,我使用了移位而不是乘法,但这并没有太大帮助。

c++ math bit-manipulation integer-overflow integer-division

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

当 a 和 b 都小于 c,但 a * b 溢出时,如何计算 a * b / c?

假设这uint是我的定点平台上最大的整数类型,我有:

uint func(uint a, uint b, uint c);
Run Code Online (Sandbox Code Playgroud)

这需要返回一个很好的近似值a * b / c

的值c大于 的值a和 的值b

所以我们肯定知道 的值a * b / c将适合 a uint

但是,a * b本身的值会溢出 a 的大小uint

因此,计算 的值的一种方法a * b / c是:

return a / c * b;
Run Code Online (Sandbox Code Playgroud)

甚至:

if (a > b)
    return a / c * b;
return b / c * a;
Run Code Online (Sandbox Code Playgroud)

但是, 的值c …

c integer integer-overflow integer-arithmetic

7
推荐指数
1
解决办法
232
查看次数

当 x*n 溢出时,如何将 x 按 n/d 缩放?

我的问题仅限于 256 位无符号整数。

我有一个值x,我需要按比率对其进行除垢n / d,其中n < d

简单的解决方案当然是x * n / d,但问题是x * n可能会溢出。

我正在寻找任何可能有助于获得尽可能准确的结果的算术技巧。

在计算之前将每个 和 除以nd不能保证成功。gcd(n, d)x * n / d

我可以使用任何流程(迭代或其他)来解决这个问题吗?

请注意,我愿意选择不准确的解决方案,但我需要能够估计错误。

algorithm math division integer-arithmetic

5
推荐指数
1
解决办法
166
查看次数