第一の関心事がパフォーマンスであって、プログラムを比較的安全に保ちたいけれども、結果が他の場合に想定されるものと比べて多少異なっても (通常は他よりも正確) かまわないときは、-O オプションでプログラムを最適化して、 -qfloat=rsqrt:hssngl:fltint を指定してください。
以下の項で、それらのサブオプションの機能について説明します。
倍精度の結果が単精度のメモリー位置に保管されている場合、単精度浮動小数点のオーバーフローおよびアンダーフローを検出するために、依然として丸め操作が挿入されます。しかし、そのような保管操作が最適化で除去されると、 hssngl は対応する丸め操作も除去し、例外は起きなくなると思われます。 (プログラムの特性によって、例外の発生に注意したほうがよい場合としなくてもよい場合があります。)
hssngl サブオプションは、浮動小数点計算の精度を常に高める だけなので、すべてのタイプのプログラムにとって安全です。 精度が高まり、しかも特定の例外が回避されるので、プログラム結果は異なることがあります。
速度が重要であり、境界条件ではあえて正確さを犠牲にしてもかまわない場合には、 hssngl と fltint を、hsflt サブオプションに置き換えることができます。このオプションは fltint と同じ内容を実行し、丸め操作も抑止します。
丸め操作の抑止では、hsflt は hssngl と同様の働きをしますが、倍精度値が単精度のメモリー位置に割り当てられると、丸め操作の抑止も行います。単精度のオーバーフローは、そういった割り当てでは検出されず、割り当てられた値が、その時点の丸めモードにしたがって正しく丸められることはありません。
重要: hsflt サブオプションを使用する場合、これらの制約事項を守ってください。そのようにしないと、プログラムは、警告を受けないまま誤った結果を生じることがあります。
したがって、このサブオプションを使用する場合は、必ず十分の注意が必要です。このサブオプションは、知識の豊富なプログラマーが特定のアプリケーション (たとえば、計算の特性が分かっているグラフィックス・プログラム) で使用するためのものです。このサブオプションを使用したときに、プログラムが適切かどうか確信が持てない場合や、またはプログラムが予期しない結果を作成する場合には、代わりに hssngl を使用してください。