相关疑难解决方法(0)

python数学模块中的log2

为什么不存在?

import math
[x for x in dir(math) if 'log' in x]
>>> ['log', 'log10', 'log1p']
Run Code Online (Sandbox Code Playgroud)

我知道我可以做log(x,2),但是log2很常见,所以我有点困惑.

哦,看起来它只在C99中定义,而不是C90,我猜这回答了我的问题.仍然看起来有点傻.

python math

42
推荐指数
2
解决办法
4万
查看次数

如何在C++中执行整数log2()?

在C++标准库中,我发现只有一个浮点日志方法.现在我使用log来查找二叉树中的索引级别(floor(2log(index))).

代码(C++):

int targetlevel = int(log(index)/log(2));
Run Code Online (Sandbox Code Playgroud)

我担心对于某些边元素(值为2 ^ n的元素),log将返回n-1.999999999999而不是n.0.这种恐惧是否正确?如何修改我的陈述以便始终返回正确的答案?

c++ logarithm floating-accuracy

41
推荐指数
7
解决办法
6万
查看次数

Chrome中的Math.log2精度已更改

我编写了一个JavaScript程序,它根据元素的数量计算二叉树的深度.我的程序已经运行好几个月,但最近我发现在Chrome与Firefox中查看网页时有所不同.

特别是在Firefox上:

Math.log2(8) = 3
Run Code Online (Sandbox Code Playgroud)

但现在在Chrome中:

Math.log2(8) = 2.9999999999999996
Run Code Online (Sandbox Code Playgroud)

我的JavaScript程序最初是为了根据元素数量找到二叉树的深度而编写的:

var tree_depth = Math.floor(Math.log2(n_elements)) + 1;
Run Code Online (Sandbox Code Playgroud)

我对此公式进行了简单修改,以便它仍可在Chrome上正常运行:

var epsilon = 1.e-5;
var tree_depth = Math.floor(Math.log2(n_elements) + epsilon) + 1;
Run Code Online (Sandbox Code Playgroud)

我有两个问题:

  1. 有没有人注意到最近Chrome的精确度发生了变化Math.log2

  2. 是否有比我上面添加的epsilon更优雅的修改?

javascript precision

14
推荐指数
1
解决办法
734
查看次数

当我输出输出时,一个有趣的结果

当我对输出进行类型转换时,我正在观察一个有趣的结果:

这是代码片段:

int bitSize = (int)log10(1.0*16)/log10(2.0);   //bistsize = 3  it should be 4
int temp = log10(1.0*16)/log10(2.0);           //temp = 4   
Run Code Online (Sandbox Code Playgroud)

基本上我想把log2(16)应该是4.我认为我对类型转换的理解是错误的.有什么建议?

谢谢

c++ visual-c++

1
推荐指数
2
解决办法
81
查看次数