编译以严格遵循 IEEE
缺省情况下, XL C/C++ 遵循 IEEE 标准中的大多数规则,但不遵循所有规则。 如果使用 -qnostrict 选项 (缺省情况下在优化级别 -O3 或更高版本启用) 进行编译,那么会违反某些 IEEE 浮点规则,从而提高性能,但可能会影响程序正确性。 要避免此问题并进行编译以严格遵守 IEEE 标准,请 使用以下选项:
- 使用 -qfloat=nomaf 编译器选项。
- 如果程序在 运行时更改舍入方式,请使用 -qfloat=rrm 选项。
- 如果数据或程序代码包含信号 NaN 值 (NaNS) ,请使用下列任何一组选项。 (信号 NaN 不同于静音 NaN; ,您必须将其明确编码到程序或数据中,或使用 -qinitauto 编译器选项创建它。)
- -qfloat=nans 和 -qstrict=nans 选项
- -qfloat=nans 和 -qstrict 选项
- 如果使用 -O3, -O4或 -O5进行编译, 请在其后面包含选项 -qstrict 。 您还可以使用 -qstrict 的子选项来优化优化器执行的变换的控制级别。
- 如果使用 AIX® 操作系统功能对浮点异常启用硬件捕获,请使用 -qfloat=fenv 选项告知优化器可能会发生陷阱。