Java什么时候可以产生NaN?

Bre*_*ent 9 java nan

我知道Java Double.NaN是什么.我有一些产生的Java代码NaN.

// calculate errors
delta = m1 + m2 - M;
eta = f1 + f2 - F;
for (int i = 0; i < numChildren; i++) {
  epsilon[i] = p[i]*m1+(1-p[i])*m2+q[i]*f1+(1-q[i])*f2-C[i];
}

// use errors in gradient descent
// set aside differences for the p's and q's
float mDiff = m1 - m2;
float fDiff = f1 - f2;
// first update m's and f's
m1 -= rate*delta;
m2 -= rate*delta;
f1 -= rate*eta;
f2 -= rate*eta;
for (int i = 0; i < numChildren; i++) {
  m1 -= rate*epsilon[i]*p[i];
  m2 -= rate*epsilon[i]*(1-p[i]);
  f1 -= rate*epsilon[i]*q[i];
  f2 -= rate*epsilon[i]*(1-q[i]);
}
// now update the p's and q's
for (int i = 0; i < numChildren; i++) {
  p[i] -= rate*epsilon[i]*mDiff;
  q[i] -= rate*epsilon[i]*fDiff;  
}
Run Code Online (Sandbox Code Playgroud)

在什么情况下Java会产生NaN值?

Del*_*ani 37

NaN 由以下事件触发:

  • 结果是复杂的价值观
    • √x其中x为负数
    • log(x)其中x为负数
    • tan(x)其中x mod 180是90
    • asin(x)或acos(x)其中x在[-1..1]之外
  • 0/0
  • ∞/∞
  • ∞/-∞
  • -∞/∞
  • -∞/-∞
  • 0×∞
  • 0×-∞
  • 1
  • ∞+( - ∞)
  • (-∞)+∞

很抱歉这样一般的答案,但我希望有所帮助.

  • 对于那些好奇的人,像我一样,为什么1 ^∞那里:http://mathforum.org/library/drmath/view/56006.html (2认同)

Ha.*_*Ha. 3

鉴于我对梯度下降的了解,你很可能会跳到无穷大,因为你没有自适应能力rate(即你的rate太大)。