编译以严格遵循 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 选项告知优化器可能会发生陷阱。