作者tkcn (小安)
看板java
标题Re: [问题] int i,u; i<=u 与 (long)i<u 结果不同
时间Thu May 20 00:13:48 2010
Thank God! (& Amos XD)
经过一番努力後,我终於在自己的电脑上重现错误了!
删减之後,我把程式改成目前这样:
http://gist.github.com/406451
这支程式正确应该要输出:
Case 1:
2147483647
Case 2:
2146483647
2146583647
2146683647
2146783647
2146883647
2146983647
2147083647
2147183647
2147283647
2147383647
2147483647
// 不重要,反正就是在回圈里跑了 11 次
但是目前输出的却是: (不一定每次都错,有时後会执行出正确结果)
Case 1:
2147483647
Case 2:
2146483647
// 回圈只跑第一次就离开了!
如果要让程式执行出正确的结果,有两个方法:
(1) 可以把 c 的初始值设为 1,
这样就不会执行到第一笔测资
而第二笔测资就会得到正确结果!
(2) 在 26 行的 i<=u 这里作强制转形成 long 的动作。
以下是我的执行环境:
Kernel: 2.6.32-22-generic-pae
OS: Ubuntu 10.04 LTS
JDK: 1.6.0_20
如果有板友愿意帮忙测试,
请用站内信寄给我:
(1) 执行结果正确与否
(2) 执行环境
我会整理之後贴在板上,并向 Oracle 反映。
谢谢大家收看 :)
---
我只是想写个 ACM 而已,怎麽会搞成这样 囧
--
◤ ◥ ◢ ◣
T$,修好它吧。 ⊙▁⊙─ ─⊙▂⊙ 碰到问题,用SoftICE就对了!
╰ ∕皿﹨ ◥皿◤ ╯
◥█◤◢ ◥ ︶◤
Lee ◤ ︶ ◥◤ ﹨▼∕◥ T$ Chen
MYTHBUGTERS ◥ ◤\◥ by dajidali
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 61.230.54.151
1F:推 godfat:碰到问题,用SoftICE就对了! 05/20 00:27
2F:推 PsMonkey:碰到问题,用SoftICE就对了! 05/20 00:42
3F:→ jlovet:-d32 -d64有差, -Xint 也有差... 05/20 01:56
4F:推 jtmh:「不一定每次都错」-> 那错的比例大概是多少? 05/20 04:21
5F:→ jtmh:我试了 20 几次都还没碰到问题 05/20 04:28
6F:→ jtmh:Kernel: 2.6.31.13 OS: MDV 2010 JDK: 1.6.0_16 05/20 04:30
7F:推 AmosYang:突然想到,把 JIT 关掉试试? 05/20 04:45
8F:→ tkcn:我错的比例至少九成以上吧 05/20 08:58
9F:→ Lordaeron:完全没问题, 怎麽跑都正确结果,无bug, 32bitXP+1.6.0_13 05/20 09:21
拿了上班的机器来测
Kernel: 2.6.32-21-generic
OS: Linux Mint 9 (Ubuntu 10.04 base) (x86 32-bit)
(1)
JDK: OpenJDK 1.6.0_18
直接拿之前 compile 过的 class 执行,完全没问题
(2)
JDK: SunJDK 1.6.0_20
无论有无重新 compile,完全没问题....
这...(2) 没错听起来还蛮恐怖的,
毕竟这软体环境跟我在家中几乎是差不多的。
※ 编辑: tkcn 来自: 140.122.183.199 (05/20 09:32)