-qfloat=hsflt 選項的技術詳細資料

對於計算浮點數值的最佳化程式而言, -qfloat=hsflt 選項並不安全,因為這些數值超出單一精準度的表示範圍,而不只是超出結果類型的範圍。 表示法的範圍包括精準度和指數範圍。

即使您遵循前一段及 -qfloat中所說明的規則,對精準度差異敏感的程式可能不會產生預期結果。 因為 -qfloat=hsflt 不符合 IEEE 標準,所以程式不會一律如預期般執行。 使用此選項進行編譯時,如果程式提供非預期、不正確或不可接受的結果,請改用 -qfloat=hssngl

例如,在下列程式中, X.EQ.Y 可能是 true 或 false:
    REAL X, Y, A(2)
    DOUBLE PRECISION Z
    LOGICAL SAME

    READ *, Z
    X = Z
    Y = Z
    IF (X.EQ.Y) SAME = .TRUE.
    ! ...
    ! ... Calculations that do not change X or Y
    ! ...
    CALL SUB(X)         ! X is stored in memory with truncated fraction.
    IF (X.EQ.Y) THEN    ! Result might be different than before.
    …

    A(1) = Z
    X = Z
    A(2) = 1.           ! A(1) is stored in memory with truncated fraction.
    IF (A(1).EQ.X) THEN ! Result might be different than expected.
    …
如果 Z 值的小數位元超出單一精準度變數的精準度,則在某些情況下可能會保留這些位元,而在其他情況下則會遺失這些位元。 當將 Z 的倍精準度值指派給單精準度變數時,這會使精確結果無法預期。 例如,將變數當作虛擬引數來傳遞,會使其值儲存在記憶體中,含有截斷而非捨入的分數。

使用 -qfloat=hsflt 可以顯示執行 COMPLEX 部門及浮點數轉換之應用程式的效能好處。 此外,在編譯以一般 POWER ® 架構為目標的應用程式時指定 -qfloat=hsflt ,可以達到那些目標特有的更廣泛效能改進。