首页 > 解决方案 > 如何产生负楠?

问题描述

我有一个我正在研究的“创造性”算法,并且在某些情况下我需要返回负数Nan

extension Decimal { 
    func placement(
        between gains: Decimal,
        and losses: Decimal
    ) -> Decimal {
        if gains == losses { 
            return self > gains ? (1 / 0) : (-1 / 0)
        }
        return (self - losses) / (gains - losses)
    }
}

不幸的是(-1 / 0)产生 Nan 而不是-Nan.
我以前不小心创建了-Nan,不幸的是,我不记得它是如何发生的。

标签: swiftnaninfinity

解决方案


当某物从字面上看是“不是数字”时,它怎么会有一个有意义的符号呢?

而且,从实际的角度来看,您希望如何区分“负 NaN”和“NaN”?是真的,Decimal.nan == -Decimal.nan以及Decimal.nan < 0-Decimal.nan < 0

let n = Decimal.nan
let nn = -Decimal.nan

print (n < 0) // true
print (nn < 0) // true
print (nn < n) // false
print (n < nn) // false
print (n == nn) // true

推荐阅读