Java 1.0 * Math.log(a)不等于Math.log(a)

时间:2017-05-05 08:50:00

标签: java math logarithm

我不明白为什么在Java中,Math.log(x)与1.0 * Math.log(x)不一样

这里第1列是nom,第2列是denom,第3列是1.0 * Math.log(nom / denom),第4列是Math.log(nom / denom)

109053.0, 25510117, -0.0, -5.454996394976426
109053.0, 25510117, -0.0, -5.454996394976426

double meu = 1.0;

/**
 * Returns the probability of the unigram in the language model
 * @param term
 * @return
 */
public double unigramProb(String term){
  double count = 1.0*unigram.count(term);
  double unigrampro = count/(1.0*unigram.termCount());
  System.out.println(count + ", " + unigram.termCount() + ", " + meu*Math.log(unigrampro) + ", " + Math.log(unigrampro));
  return Math.log(unigrampro);
//    return meu*Math.log(unigrampro);
}

为什么第3列不能等于第4列?我使用double代表所有数字。

1 个答案:

答案 0 :(得分:1)

哎呀,这是因为meu没被认出来。修复是:

private static double meu = 1.0;

不敢相信我花了45分钟。谢谢大家。