當使用以下內容計算fortran77中的PI時,編譯器會評估該值還是將在運行時評估?Fortran77編譯器處理PI = 4.D0 * DATAN(1.D0)
PI = 4.D0 * DATAN(1.D0)
當使用以下內容計算fortran77中的PI時,編譯器會評估該值還是將在運行時評估?Fortran77編譯器處理PI = 4.D0 * DATAN(1.D0)
PI = 4.D0 * DATAN(1.D0)
編輯:依賴於編譯器:見下面我的編輯。 編輯結束
我第二個米克夏普的建議,它將在運行時評估。出於好奇,我編譯了PI=4.D0*DATAN(1.D0)
和Silverfrost's ftn77 compiler並查看了生成的二進制文件。相關部分看起來像這樣:
fld1 ; push 1.D0 onto the FPU register stack
call ATAN_X
fmul dbl_404000 ; multiply by 4.D0
確實,這裏沒有編譯器的巧妙。
這當然可能與另一個編譯器(例如g77)不同。 編輯:顯然,使用g77(gcc的fortran77前端),可以(默認啓用)使用gcc的built-in atan function到auto-fold PI=4.D0*DATAN(1.D0)
into a constant。 編輯結束
問題的動機是編譯器是否識別靜態語句並預先計算值。 – ccook 2010-01-29 14:21:50