Java乘法计算错误,Java JRE致命错误:乘法过多

我试图测试Math.pow()与“手动”乘法的速度,并偶然发现这个错误:

A fatal error has been detected by the Java Runtime Environment:

EXCEPTION_ACCESS_VIOLATION (0xc0000005) at pc=0x000000005ac46888, pid=1508, tid=6016

JRE version: Java(TM) SE Runtime Environment (8.0_25-b18) (build 1.8.0_25-b18)

Java VM: Java HotSpot(TM) 64-Bit Server VM (25.25-b02 mixed mode windows-amd64 compressed oops)

Problematic frame:

V [jvm.dll+0x496888]

Failed to write core dump. Minidumps are not enabled by default on client versions of Windows

生成代码的代码:

long t = System.nanoTime();

for (int i = 0; i < 10000000; i++) {

double val = i*i*i*i*i /* 256 times *i */ *i*i*i;

sum ^= Double.doubleToLongBits(val);

}

System.out.println((System.nanoTime() - t) / 10000000);

我得到这是真的极端的情况,但仍然,这是有效的代码,可能发生的最糟糕的事情应该是Inf的价值,而不是JRE崩溃。这是由oracle描述的真正的标准行为,或只是没有人想要修复的错误,因为如果你看到它,你真的是坏人。

对于使用NetBeans 8.0.2运行的记录

更新1

似乎问题是乘数的大小。

long t = System.nanoTime();

for(int j = 0; j < 10000000; j++) {

int i = j % 50;

double val = i*i*i*i*i /* 256 times *i */ *i*i*i;

sum ^= Double.doubleToLongBits(val);

}

System.out.println((System.nanoTime() - t) / 10000000);

将通过很好。

更新2

试图从控制台运行它

java version "1.8.0_45"

Java(TM) SE Runtime Environment (build 1.8.0_45-b15)

Java HotSpot(TM) 64-Bit Server VM (build 25.45-b02, mixed mode)

并且传递得很好,所以我认为它必须是这个特定的JRE或NetBeans的问题。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值