001
30.11.2003, 15:48 Uhr
Pablo
Supertux (Operator)
|
Bzgl float haben wir vor 2 Tagen (glaube ich) schon besprochen: www.fun-soft.de/showtopic.php?threadid=5105
C++: |
#include <stdio.h> #define EPSILON 0.001 int main() { float x=1.13333333;
x = ((int)(x*10))/10.0;
printf("\t%f\n", x);
if (x <= 1.1+EPSILON) printf("kleiner-gleich 1.1\n"); else printf("NICHT kleiner-gleich 1.1\n");
printf("\n%f\n", x); return 0; }
|
Mit float und double muss man mit einer Umbegung arbeiten, da es immer auf Rundungsfehlern kommt (wenn ich ich micht irre).
Bearbeitung von Pablo: |
Ich denke um wirklich sicher zu sein, dass auch die Genauigkeit gepr+ft wird:
C++: |
#include <stdio.h> #define EPSILON 0.001 int main() { float x=1.13333333;
x = ((int)(x*10))/10.0;
printf("\t%f\n", x);
if (x <= 1.1+EPSILON || ( x<1.1+EPSILON && x>1.1-EPSILON)) printf("kleiner-gleich 1.1\n"); else printf("NICHT kleiner-gleich 1.1\n"); printf("\n%f\n", x); return 0; }
|
Könnte sein, dass ich jetzt Miste baue, aber wenn du x <= 1.1+EPSILON mit 0 ersetzt, so dass ( x<1.1+EPSILON && x>1.1-EPSILON) ausgeführt wird, genau dann x nicht kleiner als 0.1 ist, dann kommt "kleiner gleich 1.1" raus.
|
-- A! Elbereth Gilthoniel! silivren penna míriel o menel aglar elenath, Gilthoniel, A! Elbereth! Dieser Post wurde am 30.11.2003 um 15:55 Uhr von Pablo Yanez Trujillo editiert. |