在 Java 中我运行:
System.out.println(Math.log(249.0/251.0));
Output: -0.008000042667076265
在 C# 中我运行:<- 已修复
Math.Log (x/y); \\where x, y are almost assuredly 249.0 and 251.0 respectively
Output: -0.175281838 (printed out later in the program)
Google 声明:
Log(249.0/251.0)
Output: -0.00347437439
MacOS 也声称有同样的事情(Google 和 Snow Leopard 之间的第一个差异约为 10^-8,可以忽略不计。
是否有任何原因导致这些结果差异如此之大,或者我是否遗漏了一些非常明显的东西? (我确实检查过 java 和 C# 都使用基数 e)。即使 e 值略有不同,似乎也无法解释如此大的差异。有什么建议吗?
编辑:
在 Wolfram Alpha 上验证似乎表明 Java 是正确的(或者 Wolfram Alpha 使用 Java Math 计算对数...)并且我的 C# 程序没有正确的输入,但我不愿意相信这一点,因为(e^(google result) - 249/251) 给我一个 0.0044 的错误,在我看来这是相当大的,表明手头有一个不同的问题......
最佳答案
您正在查看具有不同底数的对数:
- Java 的
System.out.println(Math.log(249.0/251.0));
是自然对数(以 e 为底) - C# 的
Math.Log (x,y);
给出x
的对数,基数由y
指定 - Google 的
Log(249.0/251.0)
给出的对数底数为 10
虽然我没有得到你从 C# 得到的结果 (Math.Log( 249.0, 251.0) == 0.998552147171426
)。
关于c# - 对不同语言/体系结构/操作系统中相对较小的数字取对数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3163447/