2

我正在学习浮点数的算术。我写了以下代码。但不会发生浮点异常。我的环境是 Cent OS 6.4 (x86_64)。

请教我这个理由。

#include <stdio.h>

int
main(void)
{
  double a,b,c;
  unsigned short int fctr;

  a=3.0;
  b=0.0;
  c=1.0;

  asm volatile(
    "fstcw %w0" // get FPU control word
    :"=m"(fctr):);
  printf("FPU control word= %X\n", fctr);

  fctr = fctr ^ 0x4;
  printf("FPU control word= %X\n", fctr);

  asm volatile(
    "fldcw %w0"  // set operand to FPU control word
    : :"m"(fctr));

  asm volatile(
    "fstcw %w0" // get FPU control word
    :"=m"(fctr):);
  printf("FPU control word= %X\n", fctr);

  c = a/b;

  return 0;
}
4

1 回答 1

5

可能是因为 x86_64 架构默认使用 SSE2 而不是 x87 进行浮点运算。(状态字属于x87)

使用 -S 编译并检查生成的汇编程序是否真的是 x87。

在此链接中搜索 MXCSR

于 2014-05-29T15:01:15.577 回答