这就是我想模仿的Javasignum(double)
方法:
公共静态双signum(double d) {返回(d == 0.0双Double.isNaN(d))?d:copySign(1.0,d);}
这是我的版本
public static double signum(double x) {
return x != 0 ? x / abs(x) : 0;
}
我认为我的方法不是很容易读,但我也不认为Java方法很可读性强。我的方法可读性好吗?而且,与Java的signum
方法相比,它的效率有多高?
发布于 2015-08-07 17:05:18
浮点除法可能是最慢的基本算术运算.对于这个简单的函数,它是完全可以避免的。我也担心除法的结果是否是±1.0。
在你试图模仿的模型中有三个半的特例,你正确地处理了其中的两个。
signum(Double.NaN)
应该返回Double.NaN
。您的版本返回Double.NaN
,但通过检查它是否会这样做并不明显。signum(+0.0)
按预期返回+0.0。signum(-0.0)
返回+0.0,而不是-0.0,后者是模型行为。signum(Double.POSITIVE_INFINITY)
和signum(Double.NEGATIVE_INFINITY)
应该返回±1.0,但是函数不正确地返回Double.NaN
。https://codereview.stackexchange.com/questions/99278
复制相似问题