当前位置: 技术问答>java相关
关于NaN?
来源: 互联网 发布时间:2017-03-22
本文导语: class A{ public static void main(String [] args) { float ff; ff=(int)java.lang.Math.sqrt(-11.0); System.out.prinln(ff); } } sqrt(-11),为何编译、运行均无错误?且输出0? | 如果参数是负数,则...
class A{
public static void main(String [] args)
{
float ff;
ff=(int)java.lang.Math.sqrt(-11.0);
System.out.prinln(ff);
}
}
sqrt(-11),为何编译、运行均无错误?且输出0?
public static void main(String [] args)
{
float ff;
ff=(int)java.lang.Math.sqrt(-11.0);
System.out.prinln(ff);
}
}
sqrt(-11),为何编译、运行均无错误?且输出0?
|
如果参数是负数,则返回一个NaN(Not a Number)。
NaN的类型是double,显示转换为int,损失些精度,再赋给float,编译和运行当然没问题。
至于解释为什么是0 ……你首先得知道-11.0的二进制表示(IEEE-754),然
后当参数传递给java.lang.Double.longBitsToDouble(long bits),计算结果
再转换为int,然后再转换为float。 浮点数的表示很烦……不记得
NaN的类型是double,显示转换为int,损失些精度,再赋给float,编译和运行当然没问题。
至于解释为什么是0 ……你首先得知道-11.0的二进制表示(IEEE-754),然
后当参数传递给java.lang.Double.longBitsToDouble(long bits),计算结果
再转换为int,然后再转换为float。 浮点数的表示很烦……不记得
|
Some methods in java.lang.Math will not throw an Exception ,like
Math.sqrt(): If the argument is NaN or less than zero, the result is NaN.
If you want to pass SCJP with a high score ,you'd better remember
the methods that throw certain Excepion.
And a double number will be casted into an unkown int sometimes.
Math.sqrt(): If the argument is NaN or less than zero, the result is NaN.
If you want to pass SCJP with a high score ,you'd better remember
the methods that throw certain Excepion.
And a double number will be casted into an unkown int sometimes.
您可能感兴趣的文章:
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。