Как известно большинству здесь, double -> float приводит к потере точности. Это означает, что множественные двойные значения могут быть сопоставлены одному и тому же значению с плавающей запятой.
Но как мне пойти другим путем? Учитывая нормальное (я не забочусь о крайних случаях) с плавающей точкой, как мне найти верхнее и нижнее значение двойной точности, которые по-прежнему отображаются на тот же с плавающей точкой?
Или, чтобы говорить в коде:
function boolean testInterval(float lowF, float highF, double queryD) {
float queryF = (float) queryD;
return (lowF <= queryF) && (queryF <= highF);
}
и
function boolean testInterval(float lowF, float highF, double queryD) {
double lowD = (double) lowF;
double highD = (double) highF;
return (lowD <= queryD) && (queryD <= highD);
}
не всегда дает одинаковый результат. Я ищу две функции float-> double, чтобы вторая функция возвращала тот же результат в первой.
Это может сработать, но для меня это похоже на взлом, а не правильное решение.
function boolean testIntervalHack(float lowF, float highF, double queryD) {
double lowD = (double) lowF - Float.MIN_VALUE;
double highD = (double) highF + Float.MIN_VALUE;
return (lowD <= queryD) && (queryD <= highD);
}