В классе Math присутствует метод:
public static long round(double a) {
if (a != 0x1.fffffffffffffp-2) // greatest double value less than 0.5
return (long)floor(a + 0.5d);
else
return 0;
}
Подскажите пожалуйста что это за число такое 0x1.fffffffffffffp-2. Никак не пойму :)
0.49999999999999994— неточное представление числа, а0x1.fffffffffffffp-2— точное. Используя неточное представление, вы должны задумываться, в какую сторону оно округлится (и об этом же должны задумываться все, кто читает код). Кроме того, из внешнего вида точного представления сразу понятно, откуда оно взялось: это «предшествующее» число для0x2p-2 == 0х1p-1 == 1/16. – VladD May 29 '13 at 11:33