-qfloat=hsflt オプションは、単精度表現の範囲外にある (結果タイプの範囲外にあるだけではない) 浮動小数点値の計算を行う最適化済みプログラムの場合、安全なオプションではありません。この表現範囲には精度と指数範囲が含まれます。
前の段落および -qfloat オプションで述べた規則に従っていても、精度の違いに依存しているプログラムでは、予想した結果を生成しない場合があります。 -qfloat=hsflt がいくつかの点で IEEE に準拠していないため、プログラムは正常に実行されないことがあります。このオプションを使用してコンパイルした時に、プログラムが予期しない値、正しくない値、受諾不能な値のいずれかを出す場合は、代わりに -qfloat=hssngl を使用してください。
たとえば以下のプログラムでは、X.EQ.Y は真である場合と偽である場合があります。
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 が単精度値に割り当てられる場合に正確な結果は予期不能となります。たとえば、変数を仮引き数として渡す場合、メモリーに記憶される値の小数部は丸められるのではなく切り捨てられます。
このオプションによって処理が高速になるのは、主に POWER マシンや POWER2 マシンです。PowerPC マシンを対象とした (-qarch オプションを使用) プログラムには、これを使用しないことをお勧めします。