Re: [問題] int i,u; i<=u 與 (long)i<u 結果不同

看板java作者 (小安)時間15年前 (2010/05/20 00:13), 編輯推噓4(405)
留言9則, 7人參與, 最新討論串3/5 (看更多)
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

05/20 00:27, , 1F
碰到問題,用SoftICE就對了!
05/20 00:27, 1F

05/20 00:42, , 2F
碰到問題,用SoftICE就對了!
05/20 00:42, 2F

05/20 01:56, , 3F
-d32 -d64有差, -Xint 也有差...
05/20 01:56, 3F

05/20 04:21, , 4F
「不一定每次都錯」-> 那錯的比例大概是多少?
05/20 04:21, 4F

05/20 04:28, , 5F
我試了 20 幾次都還沒碰到問題
05/20 04:28, 5F

05/20 04:30, , 6F
Kernel: 2.6.31.13 OS: MDV 2010 JDK: 1.6.0_16
05/20 04:30, 6F

05/20 04:45, , 7F
突然想到,把 JIT 關掉試試?
05/20 04:45, 7F

05/20 08:58, , 8F
我錯的比例至少九成以上吧
05/20 08:58, 8F

05/20 09:21, , 9F
完全沒問題, 怎麼跑都正確結果,無bug, 32bitXP+1.6.0_13
05/20 09:21, 9F
拿了上班的機器來測 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)
文章代碼(AID): #1Bz0u_cV (java)
討論串 (同標題文章)
文章代碼(AID): #1Bz0u_cV (java)