If performance is your primary concern and you want your program to be
relatively safe but do not mind if results are slightly different (generally
more precise) from what they would be otherwise, optimize the program with the
**-O** option, and specify
**-qfloat=rsqrt:hssngl:fltint**.

The following section describes the functions of these suboptions:

- The
**rsqrt**suboption replaces division by a square root with multiplication by the reciprocal of the root, a faster operation that may not produce precisely the same result. - The
**hssngl**suboption is the opposite of**rndsngl**; it improves the performance of single-precision (**REAL(4)**) floating-point calculations by suppressing rounding operations that are required by the Fortran language but are not necessary for correct program execution. The results of floating-point expressions are kept in double precision where the original program would round them to single-precision. These results are then used in later expressions instead of the rounded results.To detect single-precision floating-point overflows and underflows, rounding operations are still inserted when double-precision results are stored into single-precision memory locations. However, if optimization removes such a store operation,

**hssngl**also removes the corresponding rounding operation, possibly preventing the exception. (Depending on the characteristics of your program, you may or may not care whether the exception happens.)The

**hssngl**suboption is safe for all types of programs because it always only*increases*the precision of floating-point calculations. Program results may differ because of the increased precision and because of avoidance of some exceptions. - The
**fltint**suboption speeds up float-to-integer conversions by reducing error checking for overflows. You should make sure that any floats that are converted to integers are not outside the range of the corresponding integer types.

In cases where speed is so important that you can make an informed decision
to sacrifice correctness at boundary conditions, you can replace **hssngl** and **fltint** with the **hsflt** suboption; it does the same thing as **fltint** and suppresses rounding operations.

In suppressing rounding operations, **hsflt** works like **hssngl**, but it also suppresses rounding operations when double-precision
values are assigned to single-precision memory locations.
Single-precision overflow is not detected in such assignments, and the
assigned value is not correctly rounded according to the current rounding
mode.

**Attention:** When you use the **hsflt** suboption, observe these
restrictions, or your program may produce incorrect results without
warning:

- Your program must never convert overly large floats to integer.
- Your program must never compute NaNs, INFs, or values outside the range of single precision.
- Your program must not depend on results to be correctly rounded to single precision: for example, by comparing two single-precision values for equality.

Therefore, we recommend that you use this suboption only with extreme
caution. It is for use by knowledgeable programmers in specific applications, such as
graphics programs, where the computational characteristics are known.
If you are at all unsure whether a program is suitable or if the program
produces unexpected results when you use this suboption, use **hssngl** instead.

**Related Information:**- Technical Details of the -qfloat=hsflt Option provides additional technical information about this suboption.