# Why do I get a SIGFPE?

I keep getting SIGFPE error when i try to run my program. Why so?

1 Like

This is the easiest runtime error to debug - it is a floating point error. It is virtually always caused by a division by 0, so check any divisions or modulo operations in your code carefully.

8 Likes

#include<stdio.h>

long int fact(int);
int main()
{
int t,n;
scanf("%d",&t);

while(tâ€“)
{
scanf("%d",&n);
long int r,sum=0,mod=1000000007;
for(r=0;r<=(long int)(n/2.0);r++)
sum+=((fact(n)/(factÂ®fact(n-r)))%3);
sum
=2;
if(n%2==0)
sum-=((fact(n)/(fact(n/2)*fact(n/2)))%3);

printf("%ld\n",(sum%mod));
}
return 0;
}

long int fact( int n)
{
if(n==0||n==1)
return 1;
long int pro=1;
while(n!=1)
pro*=nâ€“;
return pro;
}

i am getting the same SIGFPE error but cannot debug the program,can anyone please locate the bug

2 Likes

1

68

This is because fact() function overflows resulting in fact(34)=0.

1 Like

SIGFPE may occur due to

1. division by zero
2. modulo operation by zero
3. integer overflow (when the value you are trying to store exceeds the range) - trying using a bigger data type like long.

SIFFPE is very easy to debug.

1 Like

Why am i getting runtime here??

# include

long long int a,b,c=0;
int calc();
int mod();
int main()

{

``````int t;

scanf("%d",&t);
while(t--)
{
scanf("%lld%lld",&a,&b);

printf("%lld\n",calc());

}
return 0;

``````

}
int mod(){

`````` if(a>b)
{
if(a%b==0)
{
return 1;
}
return 0;

}
else {
if(b%a==0)
{
return 1;
}
return 0;
}

``````

}
int calc()
{
// printf(â€śaâ€ť);
if(mod()==0)
{
while(a!=b)
{
a*=2;
c++;

``````       }
return c;
}
while(mod())
{
if(a%2==0)
{
a/=2;
c++;
}
else{ a=(a-1)/2;
c++;
}
}}

``````

It is a signal representing core dumped means if you do any invalid operation the you will get â€śSIGFPEâ€ť
error. In case floating point error means division by 0 cause this error so please check your code and make sure that you are not operating this type of operation means make sure that you are not dividing by 0

#include<stdio.h>
#include<math.h>

int gcd(int n1, int n2)
{
int min,i, hcf;

``````min=(n1>n2)?n2:n1;

for(i=min; i>=1; --i)
{
if(n1%i==0 && n2%i==0)
{
hcf=i;
break;
}
}
// printf("%d\n",hcf);
return hcf;
``````

}

int fd(int a, int b)
{
int count, i, j, total;
count=total=0;
for(i=a; i<=b; i++)
{
count=0;
for(j=1; j<i; j++)
if(gcd(i,j)==1)
count++;

``````    if(i%count==0)
total++;
}
//printf("%d\n",total);
``````

}

int main()
{
long long a,j, b,i=0,n, yes;
scanf("%lld", &n);
while(nâ€“)
{
scanf("%lld%lld", &a,&b);

``````    yes=fd(a,b);
printf("%lld\n",yes);
}
return 0;
``````

}
why i m getting sigfpe error in this programâ€¦can any1 help??

#include<stdio.h>
main()
{
long int a,b,c,d,e,j,I,n;
scanf("%ld",&a);
for(I=0;I<a;I++)
{
scanf("%ld%ld",&b,&c);
e=bc;
for(j=e;j>1;jâ€“)
{
n=j
j;
if(e%n==0)
{
d=e/n;
printf("%ld",d);
break;
}
}
}
}I am getting sigfpe.Where is the problem in my code .Can any one to it???

Apart from other answers one more thing which causes this error is modulo operation by 1

#include
using namespace std;
int main()
{
long long int n;
cin>>n;
long long int a[n+1],mul[n+1]={1};
mul[0]=1;
for(long long int i=1;i<=n;i++)
{
cin>>a[i];
mul[i]=1;
}
for(long long int i=1;i<=n;i++)
{
mul[i]=mul[i-1]*a[i];
}

long long int t;
cin>>t;
while(tâ€“)
{
long long int re=1,li,ri,mi;
cin>>li>>ri>>mi;
re=(mul[ri])/(mul[li-1]);
if(re>=mi)
{
re=re%mi;
}
cout<<re<<endl;
}
return 0;
}
iam getting run time error what is the problem

Why am I getting RUNTIME(SIGFPE) error? can anyone help??