C++ 如何获取阵列的基10日志?

C++ 如何获取阵列的基10日志?,c++,eigen,C++,Eigen,我想得到Eigen::Array中每个元素的base-10 log 为了获得自然日志,我只需按照以下文档执行array.log(): 但我看不到有人提到10号基地的原木。当然有一种不用我自己写的方法吗 目前,我正在做一些类似于array.unaryExpr(std::ptr_fun(std::log10))的工作,这似乎工作得很好,但我希望在不影响性能的情况下得到更整洁的使用数学-将自然日志(数组)除以自然日志(10)。这就是为什么许多计算器等不需要费心实现每个基。因为log_b(a)=ln(a

我想得到
Eigen::Array
中每个元素的base-10 log

为了获得自然日志,我只需按照以下文档执行
array.log()

但我看不到有人提到10号基地的原木。当然有一种不用我自己写的方法吗


目前,我正在做一些类似于
array.unaryExpr(std::ptr_fun(std::log10))
的工作,这似乎工作得很好,但我希望在不影响性能的情况下得到更整洁的

使用数学-将自然日志(数组)除以自然日志(10)。这就是为什么许多计算器等不需要费心实现每个基。因为
log_b(a)=ln(a)/ln(b)。


我天真的计算科学猜测,这无论如何都是计算它的最快方法,例如,因为
e^x
的泰勒展开只是
sum(x^n/n!)
超过
n
,而对于其他基数,将有另一个指数因子需要计算(可能先乘以
x
e
在实际分析中是一个优雅的数字,就像2在计算机科学中是一个优雅的数字一样。

使用数学-将自然对数(数组)除以自然对数(10)。这就是为什么许多计算器等不需要费心实现每个基。因为
log_b(a)=ln(a)/ln(b)。


我天真的计算科学猜测,这无论如何都是计算它的最快方法,例如,因为
e^x
的泰勒展开只是
sum(x^n/n!)
超过
n
,而对于其他基数,将有另一个指数因子需要计算(可能先乘以
x
e
在实际分析中是一个优雅的数字,就像2在计算机科学中是一个优雅的数字一样。

谢谢,但我应该提到性能是至关重要的。通过引入一个额外的除法运算,每个元素增加了几个100秒的时钟周期。。。这应该更便宜。@Jason除以log(10)比乘以1/log(10)更贵?差不多吧。乘法非常便宜,所以如果我们可以在编译时计算1/log(10)并将每个元素相乘,那么这比除以log(base)要便宜得多。甚至与计算elementwise log相比,除法也应该便宜得多。请确保不要为每个元素计算
ln(b)
,即在循环之外计算该常数。谢谢,但我应该提到性能是至关重要的。通过引入一个额外的除法运算,每个元素增加了几个100秒的时钟周期。。。这应该更便宜。@Jason除以log(10)比乘以1/log(10)更贵?差不多吧。乘法非常便宜,所以如果我们可以在编译时计算1/log(10)并将每个元素相乘,那么这比除以log(base)要便宜得多。甚至与计算elementwise log相比,除法也应该便宜得多。确保不要为每个元素计算
ln(b)
,即在循环外计算该常数。