Math.max, кажется, возвращает неправильный ответ - PullRequest
4 голосов
/ 15 сентября 2010

У меня есть список двойных значений, диапазон которых я не знаю, и я хочу найти максимальное значение. Однако функция Math.max дает любопытный результат для этого примера кода:

double a = -100.0;
double maxA = Double.MIN_VALUE;
maxA = Math.max(maxA, a);
System.out.println(maxA);

И вывод:

4.9E-324

По какой-то причине Double.MIN_VALUE считается максимальным по сравнению с -100.0.

Почему?

Ответы [ 3 ]

16 голосов
/ 15 сентября 2010

MIN_VALUE :

Константа, содержащая наименьшее положительное ненулевое значение типа double, 2 ^ (- 1074).

Не самое отрицательное возможное значение.

0 голосов
/ 15 сентября 2010

MIN_VALUE Константа, содержащая наименьшее положительное ненулевое значение типа double.

Обратите внимание на «положительное» значение.

Вы сравниваете его с отрицательным значением 1> -1.

0 голосов
/ 15 сентября 2010

Довольно очевидно, что -100 меньше, чем 4.9E-324

-100 , -99 ..... -1 , 0 , 4.9E-324 , 1 , 2 , 3......
...