【发布时间】:2012-01-05 23:01:39
【问题描述】:
正如这里的大多数人都知道的那样, 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 以使第二个函数在第一个函数返回相同的结果。
这可行,但它看起来像一个 hack,对我来说不是正确的解决方案。
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);
}
【问题讨论】:
标签: java floating-point double precision ieee-754