小编典典

可以将每个浮点数精确表示为两倍吗?

java

float变量的每个可能值都可以准确地用double变量表示吗?

换句话说,对于所有可能的值X,以下操作将成功:

float f1 = X;
double d = f1;
float f2 = (float)d;

if(f1 == f2)
  System.out.println("Success!");
else
  System.out.println("Failure!");

我怀疑没有例外,或者只有例外情况(例如+/-无限或NaN)。

编辑 :问题的原始措词令人困惑(陈述了两种方式,一种回答是“否”,另一种回答是是)。我将其改写为与问题标题匹配的单词。


阅读 215

收藏
2020-11-16

共1个答案

小编典典

是。

通过列举所有可能的情况来证明:

public class TestDoubleFloat  {
    public static void main(String[] args) {
        for (long i = Integer.MIN_VALUE; i <= Integer.MAX_VALUE; i++) {
            float f1 = Float.intBitsToFloat((int) i);
            double d = (double) f1;
            float f2 = (float) d;
            if (f1 != f2) {
                if (Float.isNaN(f1) && Float.isNaN(f2)) {
                    continue; // ok, NaN
                }
                fail("oops: " + f1 + " != " + f2);
            }
        }
    }
}

在我的机器上在12秒内完成。32位 很小

2020-11-16