Δημοσιεύτηκε: 17 Ιουν 2011, 00:51
από migf1
Του 'ριξα μόλις μια ματιά, τη λύση για τα "απομεινάρια" στην έχω ήδη αναλύσει σε αυτό εδώ το post: viewtopic.php?p=192059#p192059 (και η υλοποίησή του είναι στον κώδικά μου ;) )

Τώρα σχετικά με το κρασάρισμα στις διαιρέσεις, εγώ την είχα κάνει την... λαλακία! Αντικατέστησε το case της διαίρεσης στον κώδικά μου με το παρακάτω:
Κώδικας: Επιλογή όλων

case '4': // 4. DIVISION
case '/':
{ double intpart;
puts("\nDivision\n--------");
num_askuser("Divident: ", &x, MAXSLEN_LINEBUF);
do { // demand non-zero value
num_askuser("Divisor : ", &y, MAXSLEN_LINEBUF);
if ( y == 0.0 )
puts("*** error: divisor cannot be 0");
} while (y == 0.0);
printf ("--------\nRESULT: %g / %g = %g (quotient = %g, remainder = %g)\n",
x, y, x/y, trunc(x/y), y * modf(x/y, &intpart) );
}
break;

Το πρόβλημα ήταν τα castings που έκανα από double σε int στο modulo (υπόλοιπο). Εφόσον έχουμε να κάνουμε με doubles το σωστό είναι να χρησιμοποιήσουμε την στάνταρ συνάρτηση της <math.h>:
Κώδικας: Επιλογή όλων
double modf ( double x, double * intpart );
που είναι φτιαγμένη ειδικά για αυτή τη δουλειά με doubles!

ΥΓ. Διόρθωσέ το αν θες και στον κώδικά μου στο 1ο post


UnKnown96 έγραψε:
[snip]
Όσο για τα υπόλοιπα σου 'ρχετε καμία λύση;