【问题标题】:Log base n of x [closed]x的对数基数n
【发布时间】:2013-09-23 07:58:28
【问题描述】:

我有一个小问题。 谁知道我们如何计算对数 以 Shift_L 或 Shift_R 为基数?

例如:对于 n=2,我们有这个解决方案:

int log(int n){
int res = 0;
while((n>>=1))
    res++;
return res;
}

【问题讨论】:

  • log(x) / log(base)。这只是基本的数学运算。
  • 来点简单的数学怎么样? `ld(7) = log (7) / log (2)`
  • 这个问题似乎离题了,因为它与编程无关
  • 对不起,我写的不好。我想用 shift >> 解决它

标签: c++ math logarithm


【解决方案1】:

您似乎不想要以 b 为底的对数,而是想要最大整数 n 的对数,因此 n <= log_b(x)。如果是这种情况,以下功能应该可以满足您的需求:

int intlog(double base, double x) {
    return (int)(log(x) / log(base));
}

【讨论】:

  • 谢谢!那么 doubleLog 呢?
  • @AmirhosseinMehdinejad 什么是“doubleLog”?
  • x base n 的详细日志
  • @AmirhosseinMehdinejad 什么是“详细日志”?如果您的意思是对数而不截断小数点后的所有内容,只需去掉函数中的int 强制转换。
  • 由于浮点精度,int 强制转换(或应用floor,这是等效的)在intlog(10, 1000) 等情况下会弄乱结果:1000 的以 10 为底的对数为 3,但它将被存储为2.999999[...],因此将其转换为int 将返回2
【解决方案2】:

好吧,如果我正确理解您的问题,这是一个数学问题,而不是一个实际的编程问题:

log_2 (x) = log_a (x) / log_a (2) 其中 a 可以是任意基数。

因此你可以使用math.h的函数log(double)

double res = log(x)/log(2);

【讨论】:

  • 我才16岁,对对数还不是很了解!
  • 我有工程博士学位,我也必须查一下! :D
猜你喜欢
  • 2017-04-13
  • 1970-01-01
  • 1970-01-01
  • 2016-02-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-09-09
相关资源
最近更新 更多