如何计算BigDecimal的对数?有谁知道我可以使用的任何算法?
到目前为止,我的谷歌搜索已经提出了(无用的)只需转换为双精度并使用Math.log的想法.
我将提供所需答案的精确度.
编辑:任何基地都会这样做.如果它在基数x中更容易,我会这样做.
我正在尝试确定ac#ulong数字中的位数,我试图使用一些数学逻辑而不是使用ToString().长度.我没有对这两种方法进行基准测试,但已经看到有关使用System.Math.Floor(System.Math.Log10(number))+ 1来确定位数的其他帖子.似乎工作正常,直到我从999999999999997过渡到999999999999998,此时,我开始得到一个不正确的计数.
有没有人遇到过这个问题?
我看过类似帖子的Java重点@ 为什么log(1000)/ log(10)与log10(1000)不一样?还有一个帖子@ 如何获取一个int数字的单独数字?这表明我如何使用%运算符实现相同的功能,但代码更多
这是我用来模拟这个的代码
Action<ulong> displayInfo = number =>
Console.WriteLine("{0,-20} {1,-20} {2,-20} {3,-20} {4,-20}",
number,
number.ToString().Length,
System.Math.Log10(number),
System.Math.Floor(System.Math.Log10(number)),
System.Math.Floor(System.Math.Log10(number)) + 1);
Array.ForEach(new ulong[] {
9U,
99U,
999U,
9999U,
99999U,
999999U,
9999999U,
99999999U,
999999999U,
9999999999U,
99999999999U,
999999999999U,
9999999999999U,
99999999999999U,
999999999999999U,
9999999999999999U,
99999999999999999U,
999999999999999999U,
9999999999999999999U}, displayInfo);
Array.ForEach(new ulong[] {
1U,
19U,
199U,
1999U,
19999U,
199999U,
1999999U,
19999999U,
199999999U,
1999999999U,
19999999999U,
199999999999U,
1999999999999U,
19999999999999U,
199999999999999U,
1999999999999999U,
19999999999999999U,
199999999999999999U,
1999999999999999999U
}, displayInfo);
Run Code Online (Sandbox Code Playgroud)
提前致谢
拍
我Math.log在 C# 中使用时遇到问题,它给了我错误的值。
在我的代码中:
Math.log(0.137931034482758)
Run Code Online (Sandbox Code Playgroud)
返回: -1.98100146886658
但是用计算器
log(0.137931034482758)
Run Code Online (Sandbox Code Playgroud)
给 -0.86033800657099
这是为什么?