【问题标题】:divide by zero interruption error "using float variables"除以零中断错误“使用浮点变量”
【发布时间】:2017-04-23 09:18:48
【问题描述】:

用 C 编码,(开发 c++) 我正在使用:

void h(int x)
{
    printf("error devide by zero");
}

signal(SIGFPE, h);
x = a / 0;
printf("%d", x)

它与int a, x; 配合得很好 但是当我使用float a, x; 时,错误消息是:"#INF " 有人告诉我可以中断组装,其他人告诉我必须中断 BIOS,但没有给出解决方案

【问题讨论】:

  • 浮点除以零默认不会导致异常。
  • 我认为,“错误消息”实际上是指printf 输出#INF
  • 是的,我的意思是科迪先生,确切地说:#INF00
  • 这是因为浮点值具有“无穷大”的表示,不需要引发异常。目前尚不清楚您的实际问题是什么。您想要获得例外吗?为什么不添加检查零除数的代码?
  • 您仍然拒绝回答的问题是为什么?硬件中断非常慢,在操作系统下运行时会导致各种问题。如果您可以通过简单的检查以正确的方式处理它,为什么还要这样做?

标签: c interrupt divide-by-zero


【解决方案1】:

Floating-Point environment 定义是否为被零除生成异常。除非你明确地打开或关闭它,否则你得到的行为是没有定义的。

另外,您将 h 函数本身用作信号处理程序。当信号被提升时,这会导致一个无限循环。

【讨论】:

  • 不,h 只是 void h(int x){ printf("error devide by zero");}
  • 我说如果我做 x=5/3 就可以了;例如,也 x= 5/0; “整数”
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多