Почему моя математика с двойниками выходит неправильно? - PullRequest
0 голосов
/ 28 апреля 2011

Вот как я создаю q

Double q = ((r * (i/5)) + y);

, в этот момент значения других переменных

r = 3.470694142992069E-5
i = 1
y = -116.30237535361584

, но

q = -116.30237535361584

естьчто-то не так с этой математикой?(Java)

q should be -116.30236841222755

Ответы [ 6 ]

6 голосов
/ 28 апреля 2011

i и 5 оба являются целыми числами, поэтому часть (i / 5) оценивается как целое число (0).Это сводит на нет умножение на r, поэтому у вас остается только значение для y.

5 голосов
/ 28 апреля 2011

Попробуйте

Double q = ((r * ((double)i/5)) + y);

Вот полный код.

class Main
{
        public static void main (String[] args) throws java.lang.Exception
        {
                double r = 3.470694142992069E-5;
                int i = 1;
                double y = -116.30237535361584;
                Double q = ((r * ((double)i/5)) + y);
                System.out.println(q);

        }
}

Выход: -116,30236841222755

2 голосов
/ 28 апреля 2011

Если i является целым числом (что, кажется, имеет место), то выражение i/5 выполнит целочисленную математику, что приведет к нулю.

1 голос
/ 28 апреля 2011

может быть, вы можете попробовать

Double q = ((r * i/5.0) + y);
1 голос
/ 28 апреля 2011

i не является двойным.Целочисленное деление этажей.Все 0 раз равно 0.

0 голосов
/ 28 апреля 2011

Значения с плавающей точкой общеизвестно неточны. Разница, которую вы показываете, может ожидаться для двойной арифметики. Если вам действительно нужна дополнительная точность, jquantity - это библиотека Java с открытым исходным кодом для точной математики.

...