小编Zac*_*c G的帖子

为什么Octave比0'更早?

语境:

在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
Run Code Online (Sandbox Code Playgroud)

在这个例子中,我们可以看到将输出舍入到1所需的值在数量上要小于舍入到0所需的值.37与-710相比是一个非常大的差异,因为它们的大小应该相同但是相反的迹象......

我的代码:

也许这是我的功能问题:

function [z] = sigmoid(x)
z = 1.0 ./(1.0+exp(-x));
endfunction
Run Code Online (Sandbox Code Playgroud)

我试过的:

另一点是,我改变了函数,将结果加1(基本上将图形翻译为1),边界分别变为+/- 37,分别为2和1 - 这让我觉得它真的与0有关特别是,而不仅仅是功能及其下限.

如果它与我的电脑有关,那会是什么导致这样的事情?

floating-point rounding octave data-representation

6
推荐指数
1
解决办法
130
查看次数