同樣的代碼,在vc++6.0編譯器中,計算的正常,但是遷移到vs2019中之后,運行會直接崩掉(項目中實際的程序循環幾萬遍,每次循環會用到上次的值,所以排查這個問題花了很久),現在在這里記錄下;這里之所以會出現問題,主要是非法數值強轉,不同編譯器計算的結果不一樣:
1、VC++6.0中
這里N1是非法數值:-1.#IND000000000000,fllor函數向下取整后,依舊是非法數值,這里強轉int之后,數值是0
2、VS2019 C++
這里N1是非法數值:-nan(ind),fllor函數向下取整后,依舊是非法數值,這里強轉int之后,數值是-2147483648,也就是64位系統中int的最小值
看到這里就明白為什么相同代碼用不同編譯器得到的結果不一樣了,因為我的代碼中下次循環需用到上次的值,結果Int強轉之后值不一樣,所以得到不同的結果了。