我正在学习浮点数的算法。我编写了以下代码。但是不会发生浮点异常。我的环境是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;
}

最佳答案

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

使用-S进行编译,并检查生成的汇编器是否确实是x87。

this链接中搜索MXCSR

关于linux - 为什么不发生浮点异常?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/23936237/

10-11 21:11