![]() |
1
22
对于算法来说,复杂性是一样的,差异应该只是一个(希望可以忽略不计)常数。
因此,我将使用
|
![]() |
2
8
编辑:修改代码以避免exp()溢出。这导致两个函数之间的边距大大缩小。谢谢,弗雷德里克。 代码:
(编译使用:)
结果似乎相当确凿:
有点令人惊讶的是,日志似乎更快。 纯粹的猜测: 也许是数学基础 taylor series 对于日志或其他内容,收敛速度更快?在我看来 natural logarithm 计算起来比 exponential function :
但是,不确定C库的功能是否是这样的。但这似乎并非完全不可能。 |
![]() |
3
6
你…吗 真的? 需要知道吗?这会占用你大部分的跑步时间吗?你怎么知道的? 更糟糕的是,它可能依赖于平台。那又怎样? 当然,如果你愿意,可以测试一下,但是花很多时间在微观优化上苦恼通常是个坏主意。 |
![]() |
4
5
由于您使用的是值<<1,请注意x-1>log(x)for x<1, 这意味着x-1<log(y)意味着log(x)<log(y),它已经 处理1/e~37%的病例,无需使用log或exp。 |
![]() |
5
3
python中的一些快速测试(使用c进行数学运算):
将指示日志稍慢 编辑:似乎编译器正在优化C函数,所以循环占用了时间。 有趣的是,在C语言中,它们的速度似乎相同(可能是因为mark在注释中提到的原因)。
给予时间:
|
![]() |
6
1
它可以依赖于您的libm、平台和处理器。你最好写一些调用的代码
两者在我的计算机(Windows)上的时间基本相同,因此我将使用
|
![]() |
7
1
日志越快越好…exp必须执行几次乘法才能得到答案,而log只需要将尾数和指数从base-2转换为base-e。 如果您使用的是日志,请确保边界检查(正如其他人所说)。 |
![]() |
8
0
如果您确定这是热点——编译器指令是您的朋友。尽管它依赖于平台(如果您在这样的地方追求性能——您不能不依赖于平台) 所以。问题实际上是——哪一条是目标体系结构的ASM指令——以及延迟+周期。没有这个,纯粹是猜测。 |
![]() |
Diret · 获取范围内每个数字的子倍数的算法 2 年前 |
![]() |
Saif · 排序时python如何决定何时调用比较器? 2 年前 |
![]() |
Wadu Hek · 查找列表中唯一的重复项 2 年前 |
![]() |
Crawford Patten · 如何获得整数列表的四分位数 2 年前 |
![]() |
MoonGoose · 如何在python中围绕特殊字符创建空间? 2 年前 |
![]() |
taha khamis · 在一个数字中组合元素的省道 2 年前 |
![]() |
Soup · 比O(n)更快地找到阶乘n模m 2 年前 |
![]() |
BigO · 单词积分游戏不断增加数字[关闭] 2 年前 |