【发布时间】:2019-07-06 12:16:44
【问题描述】:
上下文:
在 Octave 中,我为 Sigmoid 函数编写了代码,该函数返回 0 到 1 之间的值;在理想情况下,-Inf 只会返回 0,+Inf 只会返回 1,但由于浮点不精确,非常接近其中任何一个的值都会被四舍五入。
问题:
我的问题是为什么会发生以下情况:0 和 1 的舍入边界明显不同:
>> sigmoid(-709)
ans = 1.2168e-308
>> sigmoid(-710)
ans = 0
>> sigmoid(36)
ans = 1.00000
>> sigmoid(37)
ans = 1
>> (sigmoid(37)-1)==0
ans = 1
>> (sigmoid(36)-1)==0
ans = 0
>> sigmoid(-710)==0
ans = 1
>> sigmoid(-709)==0
ans = 0
在示例中,可以看到将输出舍入为 1 所需的值比舍入为 0 所需的值要小得多。37 与 -710 相比是一个非常大的差异,因为它们在量级但符号相反...
我的代码:
也许这是我的功能的问题:
function [z] = sigmoid(x)
z = 1.0 ./(1.0+exp(-x));
endfunction
我的尝试:
另一点,我更改了函数以将 1 添加到结果(基本上将图形向上平移 1),并且边界分别变为 2 和 1 的 +/-37 - 这让我认为它真的是尤其是 0 而不仅仅是函数及其下限。
如果和我的电脑有关,那是什么原因造成的呢?
【问题讨论】:
标签: floating-point octave rounding data-representation