推 ledia:min max 正常情況下還是避不掉 if 02/10 22:07
※ 編輯: iamlouis 來自: 114.42.10.59 (02/11 00:44)
→ iamlouis:#define min(x,y) (((x+y)-(x-y)/abs(x-y)*(x-y))/2) 02/11 00:50
→ iamlouis:#define max(x,y) (((x+y)+(x-y)*(x-y)/(x-y))/2) 02/11 00:51
→ iamlouis:利用 x-y 的正負號做花樣, min/max 就不用 if 來實作了. 02/11 00:53
→ iamlouis:其實速度沒有比較快,程式可讀性也很差,只是為了硬凹啦~XD 02/11 00:54
推 ledia:abs 也難避免 if 02/11 09:33
→ ledia:除非要搞 bit hacks 02/11 09:34
推 ledia:啊, 底下有人回了 XD 02/11 09:37
→ iamlouis:#define abs(x) (x^(x>>31)-(x>>31)) 嘿嘿嘿~ :-) 02/11 21:57
→ iamlouis:如果 x<0, 就是把 x XOR 0xff... 再減掉 0xff... 02/11 21:58
→ iamlouis:也就是 NOT x 後再減 -1 (也就是加1), 也就是二的補數. 02/11 21:59
→ iamlouis:如果 x>=0,則 x^0-0, 也就是 x 本身 (我跟gcc偷學的) XD 02/11 22:00
→ purincess:樓上這個不錯! 02/11 23:00