Dan*_*Dan 10 c java optimization java-native-interface
我需要Math.exp()经常从java 计算,是否有可能让本机版本比java的运行速度更快Math.exp()?
我只尝试了jni + C,但它比普通的java慢.
mar*_*nus 15
这已经被要求了几次(参见例如这里).这是Math.exp()的近似值,从此博客文章中复制:
public static double exp(double val) {
final long tmp = (long) (1512775 * val + (1072693248 - 60801));
return Double.longBitsToDouble(tmp << 32);
}
Run Code Online (Sandbox Code Playgroud)
它基本上与具有2048个条目和条目之间的线性插值的查找表相同,但所有这些都使用IEEE浮点技巧.它比我的机器上的Math.exp()快5倍,但如果使用-server进行编译,这可能会有很大的不同.
Dan*_*wak 12
+1编写自己的exp()实现.也就是说,如果这真的是你应用程序的瓶颈.如果你可以处理一些不准确的问题,那里有许多非常有效的指数估计算法,其中一些可追溯到几个世纪.据我了解,Java的exp()实现相当慢,即使对于必须返回"精确"结果的算法也是如此.
哦,不要害怕在纯Java中编写exp()实现.JNI有很多开销,JVM能够在运行时优化字节码,有时甚至超出C/C++能够实现的范围.
| 归档时间: |
|
| 查看次数: |
4055 次 |
| 最近记录: |