Kommentar: Einfügen von HTML im Kommentar: Link einfügen: <a href="LINKURL" target="_blank">LINKTITEL</a> Bild einfügen: <img src="BILDURL"> Text formatieren: <b>fetter Text</b> <i>kursiver Text</i> <u>unterstrichener Text</u> Kombinationen sind auch möglich z.B.: <b><i>fetter & kursiver Text</i></b> C Quellcode formatieren: <code>Quellcode</code> BASIC Quellcode formatieren: <basic>Quellcode</basic> (Innerhalb eines Quellcodeabschnitts ist kein html möglich.) Wichtig: Bitte mache Zeilenumbrüche, bevor Du am rechten Rand des Eingabefeldes ankommst ! -> I > Hallo Peter, > > danke, das hilft mir weiter. Dann wandel ich alles in Integer um und rechne damit. > > > Gruß > > Monte > > > > > Hallo, > > > > > > leider eine mega großes Problem. > > > > > > Ich habe eine Uhr realisiert, die leider bereits nach sehr kurzer Zeit immer ungenauer wird. > > > Am Anfang dachte ich es liegt an der Taktfrequenz die durch einen ungenauen Quarz abweicht. > > > Doch es scheint an Rundungsfehlern zu liegen. > > > > Hallo, > > > > bei float Zahlen kann es immer zu Rundungsfehlern kommen. Aus der Wikipedia: > > > > "Durch die unterschiedliche binäre Darstellung der Zahlen kann es in beiden Systemen zu Artefakten > > kommen. Das heißt: Zahlen, die im Dezimalsystem „rund“ erscheinen, zum Beispiel 12,45, können im > > Binärsystem nicht exakt dargestellt werden. Statt dessen wird ihre Binärdarstellung abgeschnitten, so > > dass man bei der Rückumwandlung ins Dezimalsystem den Wert 12,44999999900468785 erhält. Dieses > > kann in nachfolgenden Berechnungen zu unvorhergesehenen Ab- oder Aufrundungsfehlern führen." > > > > Entweder multiplizierst Du hoch und schneidest dann ab, oder besser noch verzichte auf float Zahlen. > > Floating Point in 8-Bit CPUs wie den Mega32 oder Mega128 sind SEHR langsam und sollten falls möglich > > vermieden werden. > > > > Gruss Peter > > > > > > > > > > Beispiel: > > > ------------------------------------------------------------------------------------------------------------- > > > Dim test As Single > > > Dim hochrunter As Single > > > Dim schrittweite As Single > > > > > > Sub main() > > > test = 35.0 > > > hochrunter = -1.0 > > > schrittweite = 0.2 > > > > > > Do While 1 > > > rechne() > > > End While > > > End Sub > > > > > > Sub rechne() > > > test = test + (hochrunter * schrittweite) > > > End Sub > > > ------------------------------------------------------------------------------------------------------------- > > > > > > Das Ergbnis ist leider nicht wie erwartet: > > > > > > test = 34.80000 > > > test = 34.60000 > > > > > > sondern > > > > > > test = 34.79999 > > > test = 34.79998 > > > usw. > > > > > > Was mache ich falsch, bzw. was kann ich machen um den Fehler zu beheben? > > > > > > > > > Gruß > > > > > > Monte > > > > > > > > >