正如大多数人所知,从double转换为float会损失精度。这意味着,多个double值可能映射到同一个float值。
但是,如何进行相反的操作?给定一个普通的(我不关心极端情况)float值,如何找到仍然映射到同一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);
}