Archiv verlassen und diese Seite im Standarddesign anzeigen : Problem mit Rechnung
bergowitch
05.03.2006, 21:22
Hallo,
ich bastel immer noch an meinem sound Problem.
Dafür brauch ich eine Rechnung:
Impulsanz_L = (2 * Ton * Zeit) / 1000;
Dabei habe ich Impulsanz_L als unsigned long definiert.
Ton hat in etwas einen Wert von 500 und Zeit 2000
Die Zeit wird in ms gemessen (und an die Funktion übergeben. Deswegen kann ich nicht direkt kürzen.
Wenn ich in s rechne (also der Faktor 1000 wegfällt) funktioniert meine Funktion.
Hat jemand eine Idee?
Gruß
Stefan
PasstScho
05.03.2006, 22:52
Hi,
sag doch mal welche Werte da für Zeit vorkommen.
MfG Alex
Dafür brauch ich eine Rechnung:
Impulsanz_L = (2 * Ton * Zeit) / 1000;
Dabei habe ich Impulsanz_L als unsigned long definier
"LONG" ist ein ganzzahliger Datentyp und verträgt sich nicht besonders gut mit mit deiner Division durch 1000.
Bei der Umwandlung in einen ganzzahligen Datentypen werden normalerweise alle Nachkommastellen einfach abgeschnitten und das Ergebnis dementsprechend ungenau.
bergowitch
06.03.2006, 06:40
Ja aber die Nachkommastellen sind für die Tonlänge ziemlich gleichgültig.
ich nehme für den Ton 500 (Hz also Frequenz) und für die Zeit 2000 (Millisekekunden also 2 Sekunden) Das Ergebnis sollte doch 2000 sein?
Gruß
Stefan
PasstScho
06.03.2006, 21:17
Hi,
Ja da sollte 2000 herauskommen.
Vielleicht hilft es wenn du
Impulsanz_L = (2L * Ton * Zeit) / 1000L; machst.
Und beim Avr sollte man diese int32_t bzw uint32_t statt long benutzen.
Ton und Zeit müssen natürlich auch diesen typ haben. Wenn nicht musst du
Impulsanz_L = (2L * (int32_t)Ton * (int32_t)Zeit) / 1000L; machen.
PS: und meine Erfahrung sagt: es liegt immer an dem, was man nicht vermutet ;)
MfG Alex
bergowitch
07.03.2006, 22:07
Hallo
PasstScho hat die Lösung gefunden. Die Lösung war
Impulsanz_L = (2L * Ton * Zeit) / 1000L; und uint32_t als Definition für Impulsanz_L hat geholfen.
Vielen Dank
Gruß
Stefan
Powered by vBulletin® Version 4.2.5 Copyright ©2024 Adduco Digital e.K. und vBulletin Solutions, Inc. Alle Rechte vorbehalten.