我需要以某种精度来评估任何基数的对数,无关紧要.有算法吗?我用Java编程,所以我对Java代码很好.
如何快速找到二进制对数?(O(1)充其量)也许能够回答我的问题,但我不明白.它可以澄清吗?
在我的小项目中,我需要做一些像Math.pow(7777.66,5555.44)这样的东西只有非常大的数字.我遇到了一些解决方案:
有人知道图书馆或简单的解决方案吗?我想很多人都处理同样的问题......
ps我发现了一些名为ApFloat的图书馆声称要做大约,但我得到的结果是如此近似,甚至8 ^ 2给了我60 ...
我有一个BigInteger数字,例如超过2 64.现在我想计算该BigInteger数字的对数,但该方法BigInteger.log()不存在.如何计算我的大BigInteger值的(自然)对数?
我有一个简单的BigDecimal,我想为另一个BigDecimal供电,例如11.11 ^ -1.54.在Java/Android中最好的方法是什么?我不喜欢转换为双打的想法,因为它是用于医疗应用,所以我很欣赏最大的可能性.到目前为止,我已经查看了来自Google Guava的http://commons.apache.org/math/和数学内容,但一无所获.
编辑:整个计算很复杂,并且有很多这样的操作.我需要尽可能多的精度.
今天,我遇到了很奇怪的问题.我需要计算一个数字的字符串长度,所以我想出了这个解决方案
// say the number is 1000
(int)(log(1000)/log(10)) + 1
Run Code Online (Sandbox Code Playgroud)
这是基于数学公式
log10 x = logn x/logn10(这里解释)
但我发现,在C中,
(int)(log(1000)/log(10)) + 1
Run Code Online (Sandbox Code Playgroud)
是不是等于
(int) log10(1000) + 1
Run Code Online (Sandbox Code Playgroud)
但它应该是.
我甚至用Java编写了相同的代码
(int) (Math.log(1000) / Math.log(10)) + 1
(int) Math.log10(1000) + 1
Run Code Online (Sandbox Code Playgroud)
但它的行为方式却一样错误.
故事还在继续.执行此代码后
for (int i = 10; i < 10000000; i *= 10) {
System.out.println(((int) (Math.log10(i)) + 1) +
" " + ((int) (Math.log(i) / Math.log(10)) + 1));
}
Run Code Online (Sandbox Code Playgroud)
我明白了
2 2
3 3 …Run Code Online (Sandbox Code Playgroud) 我正在尝试编写一个方法,它接受基数k和值n到2位小数,然后计算n的日志基数k,而不使用任何Java的Math.log方法.这是我到目前为止所拥有的:
public static double log(double k, double n) {
double value = 0.0;
for(double i = 1; i > .001; i /= 10) {
while(!(Math.pow(k, value) >= n )) {
value += i;
}
}
return value;
}
Run Code Online (Sandbox Code Playgroud)
当我尝试计算5.0625的日志库4时,问题出现了,它返回2.0,但应该返回1.5.
我不知道为什么这不起作用.任何帮助表示赞赏.
不,这不是功课,它是我试图解决的问题集的一部分.
如何获取 math/big Int 变量以 16 为底的对数。
任何帮助都会很棒,因为我是 Go 新手并且来自 Python 和 C 环境
s := "c6d86e5a2cb4bc532361c2d4940f0b1a0138066e25d65c1c530d080b11f8ca24" // Hex value
i := new(big.Int)
i.SetString(s, 16) // hex value to Big Int
// how to get the log with base 16 for a math/big Int variable.
Run Code Online (Sandbox Code Playgroud)
它在Python中是如何工作的
import math
a = 0xc6d86e5a2cb4bc532361c2d4940f0b1a0138066e25d65c1c530d080b11f8ca24
a>> 89940344608680314083397671686667731393131665861770496634981932531495305005604L
math.log(a)/math.log(16.0)
Run Code Online (Sandbox Code Playgroud)
答案是 63.908875905794794
我试图找到 log(10^k) 的结果,其中 k 是像 10000 这样的大数字。例如:
BigDecimal first = BigDecimal.TEN.pow(10000);
double result = Math.log(first.doubleValue());
Run Code Online (Sandbox Code Playgroud)
然而,“结果”变成 Infinity ,但是在 wolphram 上将其近似为 23025.85.Any 建议如何找到结果?结果小数点后前两位的数字对我来说就足够了。