当其中一个证明是NaN时,我可以让Java在浮点数之间进行比较时抛出异常吗?

Xav*_*ier 5 java comparison exception nan

我今天花了大约2个小时来追踪一个bug,如果将NaN与浮点数进行比较,java会抛出异常,我会发现它更快.如果我能在未来保护自己,那就太好了.任何帮助表示赞赏.

tem*_*def 5

JVM指令集参考明确禁止那些从抛出异常浮点运算的字节码,并严格规定了当NaN的是一个操作数,他们应该如何工作.如果有办法执行此操作,它将要求您在NaN上显式抛出异常或使用自定义编译器为您插入这些检查.

一个可能有用的选项是编写这样的函数:

public static float check(float value) {
    if (Float.isNaN(value))
        throw new ArithmeticException("NaN");
    return value;
}
Run Code Online (Sandbox Code Playgroud)

有了这个,您可以编写此效果的代码:

float f = check(myOtherFloat / yetAnotherFloat);
Run Code Online (Sandbox Code Playgroud)

然后这将进行计算并抛出错误.理想情况下,使用简短的函数名称,它不会太突兀.

w ^