我们如何处理Java中float类型的溢出边缘情况?

时间:2015-11-05 16:36:49

标签: java

我知道如果我们想要防止整数类型的溢出,我们可以使用long类型来获取它并将long类型与Integer.MAX_VALUE进行比较。那么浮动值怎么样?

例如

// Question: How do I prevent float overflow
    private float distance(Point p, Cluster c){
        float px = p.getX(), py = p.getY(), cx = c.getXMean(), cy = c.getYMean();

        return (px - cx) * (px - cx) + (py - cy) * (py - cy);
    }

1 个答案:

答案 0 :(得分:2)

试试这个:

    double doubleValue = (px - cx) * (px - cx) + (py - cy) * (py - cy);

    double posDouble = (doubleValue >= 0) ? doubleValue : (doubleValue * -1);

    if (posDouble != 0 && (posDouble < Float.MIN_VALUE || posDouble > Float.MAX_VALUE)) {
        throw new Exception("Overflow");
    }

    return (float)doubleValue;

源代码:

http://grepcode.com/file_/repo1.maven.org/maven2/commons-beanutils/commons-beanutils/1.9.0/org/apache/commons/beanutils/locale/converters/FloatLocaleConverter.java/?v=source