一个mimus Double.leastNonzeroMagnitude等于一

时间:2017-12-02 21:43:43

标签: swift math

出于某种原因,如果我1.0 - Double.leastNonzeroMagnitude,则返回1.0

第一个问题,为什么?

其次,如何获得大于零的最小Double,并且在我做数学时实际工作?

Ps。:我正在寻找这个的原因是为了避免在将sigmoid导数与交叉熵损失导数相乘时得到的一些NaN。

A) sigmoid: 1 / (1 + exp(-z))
B) sigmoid derivative: sigmoid * (1 - sigmoid) // s * (1 - s)
C) cross entropy loss derivative: -y / s + (1 - y) / (1 - s)

B * C = s - y

乘以BC应该给我一个实际数字,但我计算B,然后计算C,然后将两者相乘,即在某些情况下给我NaN(因为在B上除以零)。

Ps.2:我知道拥有epsilon = 1e-16并简单地将其添加到我的功能中,但我正在寻找一些东西"更正确"如果你知道我是什么的意思。

修改

解释为什么这个问题与所提到的问题不重复,在这个问题上我要求解决一个" epsilon"数字,而不是为什么浮点数学被打破。我不太关心低级细节,我只想要一个在未来可靠的解决方案。

0 个答案:

没有答案