Hey guys, I've got the program to compile correctly, but every time I execute, it gives me the line says "Floating point exception"? Maybe my logic isn't correct or I code somewhere wrong?

*EDIT: Well, I see the problem is the denominator can't be zero, and I correct that...and it runs now...

But the output is not correct because it doesn't choose the smallest denomintor

The programming I'm trying to do is to let the user input a nonnegative real number,

and output a fraction the closest to the input, and print out the error also.

[Error is the difference between input and output]

The denominator has to be <= 100, and it also prints out the smallest denominator, like 0.751 are 3/4, 6/8,... 75/100, but it chooses 3/4 to print out...

For example: My input is 0.751 -> printout 3/4, error = -00.100

another example: input is 42.7488 -> printout 171/4, error = 0.00120

Here's my code:

Code:

#include <stdio.h>
int main() {
//Define data types
int d, n, num, lown, lowd;
double dec, error_sq, sm_err=1, sm_err_sq;
//Print this line on screen
printf("Nonnegative real number: ");
//Scan user input
scanf("%d.%lf", &num, &dec);
//Using for loop, create "d"inomirator and "n"umerator part
//to find the closest approx.
for(d=1; d<=100; d++){
for(n=0; n<=100; n++){
//In order to compare the the error
//I have to square them both too, to make it both in positive values
//Then compare them two
sm_err_sq = sm_err * sm_err;
error_sq = (dec - n/d)*(dec - n/d);
//Using IF condition to sort the smallest error each time looping
if (error_sq<sm_err_sq){
lown = n;
lowd = d;
sm_err = dec - n/d;
}
}
}
//Print the desire value
printf("Closest approximation = %d/%d, Error = %lf\n", num*d+n, d, sm_err);
return 0;
}

Thanks for helping out. =]