我们如何处理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);
    }

试试这个:

    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

最新更新