java sinh_Java Math.tanh()性能

我有一个

Java程序,可以对Math.tanh()函数进行多次调用.出于好奇,我想与C做一个比较.因此,我编写了两个小程序,一个用Java,一个用C语言进行测试.

Java代码:

public class TestTanh {

public static void main(String[] args) {

double t1 = -1.0;

double t2 = 1.0;

double step = 1e-8;

double z = 0.0;

for(double t=t1; t<=t2; t += step) {

double y = Math.tanh(t);

z += y;

}

System.out.println("Sum = " + z);

}

}

和C代码:

#include

#include

using namespace std;

int main() {

double t1 = -1.0;

double t2 = 1.0;

double step = 1e-8;

double z = 0.0;

for(double t=t1; t<=t2; t += step) {

double y = tanh(t);

z += y;

}

cout << "Sum = " << z << "\n";

}

编译和运行程序我得到以下内容:

$time java TestTanh

Sum = -0.41281032759865655

real 0m18.372s

user 0m17.961s

sys 0m0.109s

$time ./test_tanh

Sum = -0.41281

real 0m4.022s

user 0m3.641s

sys 0m0.004s

为什么Java程序需要大约5倍的执行时间?它可能与JIT首先进行一些编译有关吗?或者Java中的tanh实现比C慢?

这是一个简单的测试,可能有一个简单的解释,但我搜索网络,但没有找到答案.我的Java版本是

$java -version

java version "1.6.0_22"

Java(TM) SE Runtime Environment (build 1.6.0_22-b04-307-10M3261)

Java HotSpot(TM) 64-Bit Server VM (build 17.1-b03-307, mixed mode)

当在包含其他基本算术运算的较大程序中使用tanh函数时,Java和C之间的差异变小(现在约为2.3).该程序仍然反复调用tanh,但现在循环中还有其他操作.我也尝试过Apache Commons的FastMath类,但实际上速度较慢(需要任何特殊设置吗?).该程序具有相同参数的结果是:

C

real 0m18.031s

user 0m18.007s

sys 0m0.007s

Java与lang.Math

real 0m40.739s

user 0m40.032s

sys 0m0.088s

Java与org.apache.commons.math.util.FastMath

real 0m46.717s

user 0m46.583s

sys 0m0.372s

我的目标是不做任何真正的基准测试,我只想看看在实际情况下以直接的方式实现代码时的差异.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值