Умножается на 0,0000001 так же, как деление на 10000000?

В Java умножается double на 0.0000001 так же, как и деление на 10000000? Моя интуиция заключается в том, что может быть разница, потому что 0.0000001 не может быть представлен точно в двойном.

Ответы

Ответ 1

Нет, это не то же самое по причине, о которой вы говорили. Вот пример:

double x = 894913.3;
System.out.println(x * 0.0000001);    // prints 0.08949133
System.out.println(x / 10000000);     // prints 0.08949133000000001

Используя BigDecimal, мы можем увидеть разницу между двумя значениями:

System.out.println(new BigDecimal(0.0000001));
System.out.println(new BigDecimal((double)10000000));

Ouput:

9.99999999999999954748111825886258685613938723690807819366455078125E-8
10000000

Ответ 2

Это не только не то же самое из-за двойного представления, но и если вы умножаете целое на double, результат получается double. Если вы разделите целое число на целое число, результатом будет целое число:

int i = 1;
System.out.println(i*0.0000001);
System.out.println(i/10000000);

печатает

1.0E-7
0