计算日志库2

时间:2012-11-30 23:07:32

标签: c# c#-4.0

我们有以下代码

(float)Math.Log(3.83031869)

我得到的输出是

1.342948

但是当我使用许多在线计算器计算Log2的相同数字时,我得到了

 1.93746

请问这个问题有什么解释吗?提前致谢。

5 个答案:

答案 0 :(得分:51)

Math.Log(num)返回基数e的日志

Math.Log(num, base)可能就是你要找的东西。

答案 1 :(得分:6)

可以在MSDN http://msdn.microsoft.com/en-us/library/x80ywz41.aspx

中看到

Math.Log函数使用基数e计算日志。

请参阅http://msdn.microsoft.com/en-us/library/hd50b6h5.aspx了解您的需求。

答案 2 :(得分:6)

当只使用一个参数调用Log方法时,您将获得Log base e。如果你提供2.0的第二个参数,你会得到你期望的结果:

//Testing in LinqPad
void Main()
{
    Math.Log(3.83031869).Dump();
    Math.Log(3.83031869, 2.0).Dump();
}

结果

1.34294800860817
1.93746443219072

答案 3 :(得分:2)

对于整数值:

    public static int Log2(UInt64 value) {
        int i;
        for (i = -1; value != 0; i++)
            value >>= 1;

        return (i == -1) ? 0 : i;
    }

答案 4 :(得分:0)

C#有一个函数可以帮你计算以2为底的对数,看下面的代码:

整数;

double logBase2 = Math.Log2(number);

如果要将数字四舍五入为 2 或 3 或逗号后的任何数字,可以使用以下代码:

double logBase2 = Math.Round(Math.Log2(number), 2);//逗号后2位