问题标签 [logarithm]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
2996 浏览

math - 如何计算复数对除“e”以外的基数的对数?

我从我正在处理的项目中切出了一些 VB6:

VB6 Log() 函数是 base-e。我想制作这个版本来做 base-2、base-10 和 base-n。我从哪里开始?

0 投票
3 回答
12558 浏览

audio - Is there an FFT that uses a logarithmic division of frequency?

Wikipedia's Wavelet article contains this text:

The discrete wavelet transform is also less computationally complex, taking O(N) time as compared to O(N log N) for the fast Fourier transform. This computational advantage is not inherent to the transform, but reflects the choice of a logarithmic division of frequency, in contrast to the equally spaced frequency divisions of the FFT.

Does this imply that there's also an FFT-like algorithm that uses a logarithmic division of frequency instead of linear? Is it also O(N)? This would obviously be preferable for a lot of applications.

0 投票
7 回答
107678 浏览

r - 具有对数刻度和自定义中断的直方图

我正在尝试在 R 中生成一个直方图,其中 y 为对数刻度。目前我做:

这给了我一个直方图,但是 0 到 1 之间的密度非常大(大约有一百万个值差异),以至于你几乎无法辨认出其他任何条形。

然后我尝试做:

它给了我想要的东西,但底部显示了值 1-6 而不是 0、1、2、3、4、5、25。它还将数据显示为点而不是条形。barplot工作,但我没有得到任何底轴。

0 投票
8 回答
4898 浏览

java - 为什么 log(1000)/log(10) 与 log10(1000) 不一样?

今天,我遇到了一个很奇怪的问题。我需要计算一个数字的字符串长度,所以我想出了这个解决方案

这是基于数学公式

log10 x = logn x/logn10在此解释)

但我发现,在 C 语言中,

不等于_

但它应该是。

我什至用这段代码在 Java 中尝试了同样的事情

但它的行为同样错误。

故事还在继续。执行此代码后

我明白了

所以这个错误似乎发生在每 1000 的倍数上。

我把这个给我的C老师看,他说可能是对数除法时的类型转换错误,但不知道为什么。

所以我的问题是

  • 根据数学,为什么不(int) (Math.log(1000) / Math.log(10)) + 1等于(int) Math.log10(1000) + 1 ,而应该是。
  • 为什么只有 1000 的倍数是错误的?

编辑:这不是舍入误差,因为

产生相同的错误输出

edit2:我必须四舍五入,因为我想知道位数

如果我只是四舍五入,我会得到相同的结果 (4),这对于 999 是错误的,因为它有 3 位数字。

0 投票
4 回答
841 浏览

math - 将数字对数转换为百分比的算法

我正在寻找一种通过以下方式将任何数字转换为百分比的方法:

  1. 1.00 是 50%

  2. 低于 1.00 的数字以对数方式接近 0%

  3. 高于 1.00 的数字以对数方式接近 100%。

    x > 0。所以 y 需要接近 0,因为 x 在正侧变得无限小。

我确信这很容易做到,但我不记得该怎么做。

0 投票
4 回答
759 浏览

performance - 如何获得 2^k 的数字的 lg2

获得以 2 为底的对数的最佳解决方案是什么,我知道是 2 的幂 ( 2^k)。(当然我只知道值2^k而不知道k它本身。)

我想到的一种方法是减去 1,然后进行位计数:

但是有没有更快的方法(没有缓存)?还有一些不涉及比特计数的东西会很高兴知道吗?

应用程序之一是:

为了在没有缓存的情况下比bitcount快,它应该比O(lg(k))存储k位的数量快。

0 投票
2 回答
2416 浏览

ada - 你如何编写代码来确定 Ada 中值的对数?

使用 Ada (GNAT):我需要确定给定值的 10 次方。最明显的方法是使用对数;但这无法编译。

错误:

  • utility.adb:495:26:“日志”不可见
    • utility.adb:495:26:a-ngelfu.ads:24 的不可见声明,第 482 行的实例
    • utility.adb:495:26:a-ngelfu.ads:23 处的不可见声明,第 482 行的实例

然后我尝试引用包,但这也失败了:

错误:

  • utility.adb:495:41:没有候选解释与实际相符:
  • utility.adb:495:41:调用“Log”的参数太多
  • utility.adb:495:53:预期类型“Standard.Float”
  • utility.adb:495:53:在 a-ngelfu.ads:24 处对“Log”的调用中找到类型通用整数 ==>,第 482 行的实例
0 投票
7 回答
9921 浏览

python - 使用按位运算求 n = 2**x 的指数 [n 的以 2 为底的对数]

有没有一种直接的方法可以仅使用按位运算从 2 的幂中提取指数?

编辑:虽然这个问题最初是关于按位运算的,但如果您想知道“在 Python 中给定 Y = 2 X找到 X 的最快方法是什么?”**

我目前正在尝试优化一个减少表单中偶数N的例程( Rabin-Miller primality test ) 。我可以通过以下方式获得零件:2**s * d2**s

但我找不到通过按位运算仅提取“ s ”的方法。我目前正在测试的解决方法不太满意(它们都非常慢)是:

  • 使用对数函数
  • 操作 2**s 的二进制表示(即计算尾随零)
  • 循环除以 2 直到结果为 1

我正在使用 python,但我想这个问题的答案应该与语言无关。

0 投票
3 回答
467 浏览

logarithm - 使用对数避免数值下溢的算术问题

我有两个分数列表;

A = [ 1/212, 5/212, 3/212, ... ]

B = [ 4/143, 7/143, 2/143, ... ]

如果我们定义A' = a[0] * a[1] * a[2] * ...B' = b[0] * b[1] * b[2] * ...

我想计算A' / B',

我的问题是 A 和 B 都很长,每个值都很小,所以计算乘积会很快导致数值下溢......

我了解通过对数将乘积转化为总和可以帮助我确定 A' 或 B' 中的哪个更大

IEmax( log(a[0])+log(a[1])+..., log(b[0])+log(b[1])+... )

但我需要实际比例....

迄今为止,我最好的选择是将数字表示形式保留为分数,即A = [ [1,212], [5,212], [3,212], ... ]实现我自己的算术,但它变得笨拙,我觉得我只是缺少一种(简单的)对数方式......

A 和 B 的分子不是来自序列。出于这个问题的目的,它们也可能是随机的。如果它有助于 A 中所有值的分母相同,则 B 中的所有分母也相同。

欢迎任何想法!

0 投票
4 回答
2620 浏览

logarithm - 使用对数避免数值下溢的算术问题(取 2)

我有两个分数列表;

A = [ 1/212, 5/212, 3/212, ... ]

B = [ 4/143, 7/143, 2/143, ... ]

如果我们定义A' = a[0] * a[1] * a[2] * ...B' = b[0] * b[1] * b[2] * ...

我想计算 A' 和 B' 的归一化值

即特别是A' / (A'+B')和 的值B' / (A'+B')

我的问题是 A 和 B 都很长而且每个值都很小,所以计算乘积会很快导致数值下溢......

我了解通过对数将乘积转化为总和可以帮助我确定 A' 或 B' 中的哪个更大

IEmax( log(a[0])+log(a[1])+..., log(b[0])+log(b[1])+... )

并且使用日志我可以计算出价值,A' / B'但我该怎么做A' / A'+B'

迄今为止,我最好的选择是将数字表示形式保留为分数,即A = [ [1,212], [5,212], [3,212], ... ]实现我自己的算术,但它变得笨拙,我觉得我只是缺少一种(简单)对数方式......

A 和 B 的分子不是来自序列。出于这个问题的目的,它们也可能是随机的。如果它有助于 A 中所有值的分母相同,则 B 中的所有分母也相同。

欢迎任何想法!

(ps。我在24 小时前就该比率提出了类似的问题A'/B',但这实际上是一个错误的问题。我实际上是在追问A'/(A'+B')。对不起,我的错误。)