[問題] 關於overflow(精華區2-12)

看板C_and_CPP (C/C++)作者 (沒有存在感的人)時間11年前 (2015/05/21 03:36), 11年前編輯推噓1(1014)
留言15則, 7人參與, 最新討論串1/1
我試著做了精華區2-12說的那幾個問題: 使用64bit電腦+Lubuntu 15.04+gcc 1. long int a, b, c; a= 40000L; b= 60000L; c= a*b; printf("c= %ld\n", c);// 請問,c= ???, why? 這題如果是64bit電腦,long int會是8 bytes,所以結果會是2400000000沒錯 可是如果換成int(sizeof(int)=4),printf改("%d") 會變成c= -1894967296 (overflow) 可是如果type用int可是printf用%ld,顯示出來就還是2400000000 (當然compiler有warning) 請問這算undefined behaviour嗎?因為C standard好像沒看到有這種自動升級的 2. long a, b; a= 10; b= a + 1;// b= 11, > a while (b > a) { a++; b+= 1; } printf("a= %ld, b= (a+1)= %ld\n", a, b); 我把a的初始值調很大,所以一下就出來了 a= 9223372036854775807, b= (a+1)= -9223372036854775808 3. double a, b; a= 4.0*atan(1.0);// a= 3.1415926 ... b= a + 1.0;// b= 4.1415926 ..., > a while (b > a) { a*= 1.001; b= a + 1.0; } printf("a= %.3lf, b= (a + 1.0)= %.3lf\n", a, b); // 請問:a= ???, b= ???, why? 這題我跑的結果是 a= 9026451774346548.000, b= (a + 1.0)= 9026451774346548.000 看了冼鏡光對浮點運算的介紹應該大概知道為何了。 (不過可以不跑程式預測其值嗎?好像不可能) 2-12那7個問題真的很有趣... -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 86.200.100.19 ※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1432150589.A.F70.html

05/21 04:48, , 1F
1. undefined behaviour, 2. undefined behaviour
05/21 04:48, 1F

05/21 04:50, , 2F
3. implementation defined
05/21 04:50, 2F

05/21 05:38, , 3F
3. 若浮點數為 IEEE754 則答案會在剛超過 2^53 時停止
05/21 05:38, 3F

05/21 05:39, , 4F
因為這時這浮點數的 ulp 是 2, +1 不足一個 ulp 故不會變動
05/21 05:39, 4F

05/21 06:09, , 5F
冼 ㄒ一ㄢˇ
05/21 06:09, 5F

05/21 09:08, , 6F
冼 不是念成 sheng3 嗎?怎麼是 xian3?
05/21 09:08, 6F

05/21 13:07, , 7F
姓氏是唸ㄒ一ㄢˇ,其他不清楚。
05/21 13:07, 7F

05/21 15:42, , 8F
我也記得是ㄒ一ㄢˇ,可是我的gcin沒有這字
05/21 15:42, 8F
請問2.的undefined behaviour是指發生overflow後的處理嗎?(程式停掉或繼續) 還是overflow本身? 3.是implementation defined? 因為各家編輯器的浮點數規格不同嗎? ※ 編輯: wtchen (86.200.100.19), 05/21/2015 15:58:17

05/21 16:06, , 9F
有號整數 overflow 就是 undefined behavior
05/21 16:06, 9F

05/21 16:07, , 10F
意思是運算的結果變成什麼都合理
05/21 16:07, 10F

05/21 16:09, , 11F
implementation defined 意思是 C standard 沒規定浮點
05/21 16:09, 11F

05/21 16:11, , 12F
數的儲存方式. 若某個平台上不是用 IEEE754 答案就不一
05/21 16:11, 12F

05/21 16:12, , 13F
樣了. 簡言之, 這幾個問題與其說是 C 問題, 不如說是計
05/21 16:12, 13F

05/21 16:13, , 14F
算機組織的問題.
05/21 16:13, 14F

05/21 16:15, , 15F
翻了一下精華區, 原來這些問題的作者是 sjgau 呀 XD
05/21 16:15, 15F
文章代碼(AID): #1LNE8zzm (C_and_CPP)
文章代碼(AID): #1LNE8zzm (C_and_CPP)