numがdoubleならGCCでもループ消えないわ。-O3でも3命令(sub、addsd、jne)のループしてる
numを整数にすると-O2以上でループ消える
それから>>447のlong i;はまずいんじゃないか?longだと4000000000を表現できないと思うけど