#include <stdio.h>
int
main()
{
int i;
int c;
int a[30] = { 5, 7, 11, 13, 17, 19, 23, 29, 31, 37,
41, 43, 47, 53, 59, 61, 67, 71, 73, 79,
83, 89, 97, 101, 103, 107, 109, 113, 127, 131 };
for (i = 0; i < 30; i++) {
c = (a[i] + i) / (i - 1);
printf("Value of c is %d", c);
}
}
Run Code Online (Sandbox Code Playgroud)
我不明白为什么我在这个程序中面临浮点异常错误。
for(i = 0; i < 30; i++){
c = (a[i] + i)/(i-1);
Run Code Online (Sandbox Code Playgroud)
在此循环的第二次迭代中,您除以零。
由于历史原因,在 Unix 系统上,整数被零除是使用相同的信号(SIGFPE,“浮点异常”)报告的,该信号用于报告实际由浮点算术引起的错误。现在无法更改,因为太多现有程序依赖于它。
(我不知道实际上是什么历史原因。它们可能类似于“PDP-11 有一个浮点除法指令而不是整数除法指令,所以原始的 C 编译器使用浮点数学来实现整数除法”,但我只是编造的,如果这是真的,那是偶然的。)
(具有讽刺意味的是,在现代 CPU 上,浮点除以零通常会产生 ±Inf 结果但不会触发信号,除非您fesetenv用来打开陷阱。)
| 归档时间: |
|
| 查看次数: |
94 次 |
| 最近记录: |