Java Math выдает неправильный вывод - PullRequest
0 голосов
/ 18 августа 2011

(51 ^ 43) Mod77 в научном калькуляторе дает 2 в качестве выхода, однако,

(int) (Math.pow (51,43)% (double) 77) дает 12, которое должно быть 2 вместо.

Можете ли вы помочь?

Ответы [ 3 ]

2 голосов
/ 18 августа 2011
    final BigInteger base = BigInteger.valueOf(51);
    final BigInteger exponent = BigInteger.valueOf(43);
    final BigInteger modulus = BigInteger.valueOf(77);
    System.out.println(base.modPow(exponent, modulus));

отпечатки 2.

1 голос
/ 18 августа 2011

A double не обладает достаточной точностью, чтобы вместить все цифры Math.pow(51,43).Поэтому, когда вы берете mod 77, ответ подвержен значительным ошибкам округления.

Я предлагаю использовать BigInteger для целочисленной арифметики произвольной точности.

0 голосов
/ 18 августа 2011

Вместо:

(int)(Math.pow(51,43)%(double)77)

сделать:

(int)(Math.pow(51,43))%((double)77)
...