8.2 DEC Alpha选项

DEC Alpha处理器默认设置为最大浮点性能,用于全面支持IEEE运算特性。

DEC Alpha处理器默认配置下不支持无限运算和gradual underflow(非正常数字)。产生无穷或者非正常数据的操作会产生浮点异常(称为陷阱)并造成程序终止,除非操作系统捕获并处理了这个异常(通常这种效率很低)。IEEE标准明确说明这些操作应该产生IEEE数据格式的特殊的结果来表示特殊情况。

在大多数情况下DEC Alpha默认的行为是可以接受的,因为大多数程序不会产生无穷或者非正常数据。有些应用程序要求这些特性,GCC提供’-mieee’选项用于全面支持IEEE运算。

为了说明这两种情况的不同之处,下面的程序用1除以0:

include

int

main (void)

{

double x = 1.0, y = 0.0;

printf ("x/y = %g\n", x / y);

return 0;

}

在IEEE运算中1/0的结果是inf(无穷)。如果程序编译在默认设置下的Alpha处理器上运行,程序会产生异常并终止程序:

$ gcc -Wall alpha.c

$ ./a.out

Floating point exception (on an Alpha processor)

使用’-mieee’选项全面支持IEEE标准--1/0的正确结果是inf并且程序正常运行:

$ gcc -Wall -mieee alpha.c

$ ./a.out

x/y = inf

注意使用了’-mieee’选项编译的程序产生浮点异常会减慢程序运行速度,因为异常是被软件处理的而不是硬件。