我在我的Mac OS X的XCode 7.2.1嘗試一些無符號長長的意外行爲
value: 18446744073709551615
ULLONG_MAX: 18446744073709551615
但輸出是 -
value: 0
ULLONG_MAX: 18446744073709551615
下面的變化也沒有什麼區別。
uint64 N = 100000ull;
uint64 value = (pow(N, 4ull) + 2ull * pow(N, 3ull) + 3ull * pow(N, 2ull) + 2ull * N)/4ull;
在我的終端產量運行gcc --version
命令 -
Configured with: --prefix=/Applications/Xcode.app/Contents/Developer/usr --with-gxx-include-dir=/usr/include/c++/4.2.1
Apple LLVM version 7.0.2 (clang-700.1.81)
Target: x86_64-apple-darwin15.0.0
Thread model: posix
我試圖上面Hackerrank克++編譯器4.9.2碼和輸出是正確的。
發生了什麼?是Clang還是我的操作系統(Mac OS X 10.11)?
如果您將'long double'分配給您,您會看到結果是_not_'ULLONG_MAX'。相反,它會溢出。 '長雙倍值= pow(N,4.0L)+ 2.0L * pow(N,3.0L)+ 3.0L * pow(N,2.0L)+ 2.0L * N)/ 4.0L;' – paddy
謝謝:) 'long double'可以容納更多的數據,這對於檢查在這種情況下是否發生溢出確實有幫助。 –