c++教程 為什么Fortran90的程序在ifort和gfortran兩種編譯器下結(jié)果不同?
為什么Fortran90的程序在ifort和gfortran兩種編譯器下結(jié)果不同?一般原因是程序不嚴(yán)謹(jǐn),比如定義數(shù)組后沒(méi)有初始化,判斷兩個(gè)實(shí)數(shù)是否相等,使用了一些非通用函數(shù)(不同版本的編譯器可能有一些
為什么Fortran90的程序在ifort和gfortran兩種編譯器下結(jié)果不同?
一般原因是程序不嚴(yán)謹(jǐn),比如定義數(shù)組后沒(méi)有初始化,判斷兩個(gè)實(shí)數(shù)是否相等,使用了一些非通用函數(shù)(不同版本的編譯器可能有一些唯一的函數(shù)),數(shù)值精度不統(tǒng)一等,輸入數(shù)據(jù)不一致也會(huì)造成這種影響。例如,4.0和4.0d0在計(jì)算機(jī)視圖中是兩個(gè)不同的數(shù)字。
即使由同一編譯器編譯的程序在不同的計(jì)算機(jī)上運(yùn)行,甚至在同一臺(tái)計(jì)算機(jī)上運(yùn)行,結(jié)果也可能不同。這涉及到CPU位的數(shù)量。
避免這種情況,編寫(xiě)代碼養(yǎng)成良好習(xí)慣。順便說(shuō)一句,在定義real時(shí),要弄清楚它的種類(lèi)。定義完數(shù)組后,立即進(jìn)行初始化,判斷兩個(gè)實(shí)數(shù)是否相等。不要直接判斷。輸入數(shù)據(jù)時(shí),考慮輸入數(shù)據(jù)的類(lèi)型等