当一段代码最近看,我碰到一条线,让我思考:两个正漂浮物的产物是否为负?
if a*b > 0:
# do stuff
应当假定a
和b
是浮动。
问:
是否可能存在(非常小的,积极的,并有可能接近〜eps_mach)的a
价值观和b
,使得他们的产品是负的?如果不是,是否可以是a*b==0
既不是a==0
也不是b==0
。
为了不成为一个完整的懈怠,这里是我的想法:
不,这是可能的,因为在FP算术产品以这样的方式可能定义的
a
符号位和b
确定a*b
的符号位。因此,在一些基本级别上,计算运行“a
的注释符号位是正值,注意符号位b
是正值,将符号位a*b
设置为正值。我想象这个约定被指定和普遍分类某处只要它存在。a*b==0
与a!=0
和b!=0
似乎当然有可能。答案将取决于计算机和语言。
这使我一个子问题:
问:
难道是更安全的实施,因为下面的代码?如果不安全,那该怎么办?
if (a>0 and b>0) or (a<0 and b<0):
# do stuff
@old_timer为什么你会想到为NaN,而不是正无穷大? –
@old_timer IEEE754要求无穷大,正如Java语言规范一样。其他语言可能会做一些奇怪的事情,但我通常会期待无限。它有所不同,因为NaN> 0与所有NaN比较一样是错误的。 –
我删除我的意见。 –