为什么不存在?
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,我猜这回答了我的问题.仍然看起来有点傻.
在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.这种恐惧是否正确?如何修改我的陈述以便始终返回正确的答案?
我编写了一个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)
我有两个问题:
有没有人注意到最近Chrome的精确度发生了变化Math.log2?
是否有比我上面添加的epsilon更优雅的修改?
当我对输出进行类型转换时,我正在观察一个有趣的结果:
这是代码片段:
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.我认为我对类型转换的理解是错误的.有什么建议?
谢谢