Multi-Exponentiation Implementation
Multi-Exponentiation Implementation
本文关键字:Implementation Multi-Exponentiation 更新时间:2023-10-16
有人知道实现的多指数算法吗?我要找的是给定向量A和B可以用一些快速的算法计算A[I]^B[I]的乘积
谢谢!
下面假设您的数据是浮点数。
如果您使用多精度整数,请指定您的要求。干净的数值方法当然是先取对数。事实上,即使结果是有限的,部分积也很容易低于/溢出。
对应的c++程序是:
#include <cmath>
#include <functional>
#include <numeric>
double f(double x, double y)
{
return y * std::log(x);
}
template <typename I, typename J>
double multi_exponentiation(I a0, I an, J b0)
{
return std::exp(std::inner_product(a0, an, b0, 0., std::plus<double>(), f));
}
// Example program
int main()
{
std::vector<double> a, b;
...
double e = multi_exponentiation(a.begin(), a.end(), b.begin());
}
使用inner_product
而不是自己编写循环有一个优点,一旦你知道性能是一个问题,你可以用第三方库提供的parallel_inner_product
算法替换inner_product
算法(或自己编写一个)。
速度要有多快?根据算法的大小,幂函数不应该成为太大的瓶颈。
你可以像下面这样写一个简单的函数:
Vector VectorPower( Vector vec1, Vector vec2 )
{
assert(vec1.length() == vec2.length());
Vector vecAns( vec1.length() );
for( unsigned int i = 0; i < vec1.length(); i++ )
{
vecAns[i] = pow( vec1[i], vec2[i] );
}
return vecAns;
}
大多数情况下,这对您的应用程序来说已经足够有效了。如果你正在实现一个平方根或其他一些超越函数,那么你将不得不考虑优化。
此外,一些处理器针对任意积分功率进行了优化,gpu当然是(尽管这没有多大帮助,除非这是一个与图形相关的帖子,并且没有标记为这样)。
希望这能回答你的问题。
您是否尝试过tommath(不确定它是否符合您的性能要求)?它的多精度整数算术库!
相关文章:
- Softmax Implementation in C++
- 在陈述"Implementation-defined"时,什么样的软件是"Implementation"的一部分?究竟什么是"Implementation"?
- 对于代理容器上的迭代器来说,"least bad implementation"可能是什么?
- STL binary_search() implementation
- Android Studio 3.1.2 - 无法运行C++子例程"No implementation found for Java.lang.String..."
- Vivado HLS implementation of RISCV
- C++ Class implementation
- c++ is_member_pointer implementation
- shared_mutex C++11 implementation
- VC++ implementation of std::promise
- libc++ implementation of std::condition_variable_any
- Paypal implementation...c++
- Boost Mutex implementation for Windows
- Implementation of mergesort
- C++ `Timer` class implementation
- BFS implementation
- C++ NTP Server implementation
- Low level implementation of bitwise Mod
- std::list implementation&pointer arithemetic.
- SIMD Implementation of std::nth_element