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