0

При попытке возведения в квадрат значения с (скорость света) выводится неверное число.

Должно быть:

89875517873681764

Для (long)Math.pow(c, 2) выводится:

89875517873681760

В чем проблема?

Regent
  • 19,134
iamfina
  • 67

1 Answers1

3

Math.pow работает с типом double. Отсюда и ошибка округления.

Хотите получить 89875517873681764, работайте с типом long:

    long c = 299792458;
    long pow2 = c * c;
  • Ещё как вариант можно использовать BigInteger или BigDecimal: BigInteger.valueOf(c).pow(2).longValue(). – Alex Chermenin Oct 26 '17 at 07:46