Для моего вступления. к обзору программных экзаменов меня попросили написать программу, которая использует функцию для вычисления gcd набора чисел. Я написал следующий код, который иногда, кажется, работает нормально, но другие возвращают Исключение с плавающей точкой 8. Я надеялся, что кто-то может пролить свет.
Я выполнил это, используя clang gcd.c -o gcd
на Mac-терминале, используя macOS High Sierra и числа, которые возвращают ошибку FP, были 5372 18960 -230048 1185 16486
Это код:
#include <stdio.h>
#include <stdlib.h>
int gcd(int a, int b){
if((a==0) || (b==0)){
return 0;
}else{
if( a % b == 0 ){
return b;
}else{
if ( b % a == 0 ){
return a;
}
}
}
while( (a != 0) && (b != 0) ){
if (abs(a)>abs(b)){
a = abs(a) % abs(b);
}
if(b>a){
b = abs(b) % abs(a);
}
}
if (a == 0){
return b;
}else{
return a;
}
}
int main(void){
int n;
printf("Please enter the number of integers in your array:\n");
scanf("%d", &n);
int a[n];
printf("Please enter the numbers in your arrray:\n");
for (int i = 0; i < n; ++i){
scanf("%d", &a[i]);
}
for (int i = 0; i < (n-1); ++i){
a[i] = gcd(a[i], a[i+1]);
}
printf("The gcd of the %d numbers is %d .\n", n, a[n-2]);
return 0;
}