Hallo, ich moechte eine Berechnung machen und verwende dazu einen float typ.--> siehe auch Dateianhang. Anschliessend moechte ich diesen in Int umwandeln, damit ich ihn dann in der ltoa() Funktion verwenden kann. Folgenden Forum Vorschlag Beitrag "Float nach Int / Ascii" wollte ich dazu zu Hilfe nehmen. Leider kommt auf meinem Display nur fuer den Fall dass A_beat kleiner wie 3448 ist immer -1 raus. Nun weiss ich aktuell nicht, wo das Problem liegt ? Habt Ihr eine Idee ? Gruss Roger
Roger Koller wrote: > Hallo, > > ich moechte eine Berechnung machen und verwende dazu einen float typ.--> > siehe auch Dateianhang. > > Anschliessend moechte ich diesen in Int umwandeln, damit ich ihn dann in > der ltoa() Funktion verwenden kann. > > Folgenden Forum Vorschlag > Beitrag "Float nach Int / Ascii" > wollte ich dazu zu Hilfe nehmen. > > Leider kommt auf meinem Display nur fuer den Fall dass A_beat kleiner > wie 3448 ist immer -1 raus. > Nun weiss ich aktuell nicht, wo das Problem liegt ? > > Habt Ihr eine Idee ? Dann divisiert du 60 durch 0, weil A_beat/3448 = 0 ist, denn A_beat ist long. Caste auf float oder dividiere durch 3448f. Johann
> temp = (60/(A_beat/3448));
temp = (60.0/((float)A_beat/3448.0));
Roger Koller wrote:
> Habt Ihr eine Idee ?
Ganz ehrlich? OK:
Fließkommazahlen sind schlicht und einfach wie eine Seuche. Jeder Depp
(nicht persönlich nehmen, bitte) will sie haben, aber keiner ist bereit,
sich mal mit ihren Grundlagen zu beschäftigen.
Und ja, selbst moderne computergesteuerte Sternwarten kommen heute
problemlos ohne Fließkomma aus.
Also: Skaliere den Kram herauf, berechne deine Sachen möglichst klug
(überlege dir, in welcher Reihenfolge die Teilrechnungen am besten
erledigt werden, sodass sich möglichst viel rauskürzt und du keine
Überläufe riskierst). Danach das Komma richtig setzen und bingo.
Stichwort: Scaled Integer. Warum mit 0,004 Metern rechnen, wenns mit 4
Millimetern genauso geht?
Den Fließkommadreck kann man benutzen, wenn man nicht von vorneherein
weiß, welche Dimensionen die Werte annehmen, da sie einerseits einen
großen Bereich, andrerseits diesen aber lückenhaft und ungenau abdecken.
Sven P. wrote: > Roger Koller wrote: > > > Also: Skaliere den Kram herauf, berechne deine Sachen möglichst klug > (überlege dir, in welcher Reihenfolge die Teilrechnungen am besten > erledigt werden, sodass sich möglichst viel rauskürzt und du keine > Überläufe riskierst). Danach das Komma richtig setzen und bingo. > Stichwort: Scaled Integer. Warum mit 0,004 Metern rechnen, wenns mit 4 > Millimetern genauso geht? > Ich bin davon ausgegangen, dass bei jedem Dividieren eine Gleitkommazahl automatisch entsteht und deswegen habe ich den float typ gewaehlt.
Ne, Fließkomma kommt nur raus, wenn du auch Fließkomma reinsteckst. Und trotzdem: Hochskalieren, rechnen, runterskalieren. Geht schneller, ist berechenbarer.
>Ich bin davon ausgegangen, dass bei jedem Dividieren eine Gleitkommazahl >automatisch entsteht und deswegen habe ich den float typ gewaehlt. Tut sie aber nicht ;) Schreib den Kram mal um: > temp = (60/(A_beat/3448)); temp = ((60 * 3448) / A_beat); Dann brauchst du auch kein float mehr.
Johann L. wrote: > > Dann divisiert du 60 durch 0, weil A_beat/3448 = 0 ist, denn A_beat ist > long. > > Caste auf float oder dividiere durch 3448f. > > Johann Hallo Johann, mit dem Kommentar "weil A_beat/3448 = 0 ist" bin ich etwas verwirrt. Mir ist schon klar das A_beat ein long ist, aber wieso spielt dies bei der Diffision hier eine Rolle. Ich denke die Berechnung wird unter Temp abgespeichert oder zwischengespeichert, bis die Berechnung vollstaendig fertig ist. Das hier A_beat mit ins Spiel kommt, habe ich noch nicht verstanden. Koenntest Du mir das etwas ausfuehrlicher erlauetern. Im voraus schon meinen besten Dank Gruss Roger
>mit dem Kommentar "weil A_beat/3448 = 0 ist" bin ich etwas verwirrt.
Angenommen A_beat ist 3447
3447/3448 ist Null bei Ganzzahldivision.
60/0 ist? Undefiniert!
Roger Koller wrote: > Ich bin davon ausgegangen, dass bei jedem Dividieren eine Gleitkommazahl > automatisch entsteht und deswegen habe ich den float typ gewaehlt. Assumption is the mother of all f uckups. Es wird Zeit, dass du dir ein C-Buch durchliest.
> temp = ((60 * 3448) / A_beat);
Upps, Fehler gefunden!
temp = ((60UL * 3448) / A_beat);
holger wrote: >> temp = ((60 * 3448) / A_beat); > > Upps, Fehler gefunden! > > temp = ((60UL * 3448) / A_beat); Was bedeutet das UL ?
Roger Koller wrote: > holger wrote: >>> temp = ((60 * 3448) / A_beat); >> >> Upps, Fehler gefunden! >> >> temp = ((60UL * 3448) / A_beat); > > Was bedeutet das UL ? Castet das Dingen auf 'unsigned long'. Dadurch wird '60*2448' auch auf 'unsigned long' erweitert und das Ergebnis passt.
Hallo zusammen, gibt es irgendwo ein gutes Buch oder Internetseite, wo man all diese Feinheiten wie UL findet und erklaert bekommt. Ich kann ein wenig C programmieren, aber die meisten Fehler passieren wie ich auch bei anderen Leuten im Forum gesehen haben Aufgrund von falschen Typisierungen. Aber dies ist meiner Meinung nach das A und O beim Programmieren. Bei meinen Programmier Versuchen, wende ich staendig die Try und Error Methode an um ueberhaupt auf einen gruenen Zweig zu kommen, da meistens der Code was anderes macht, was ich will, was aber Hauptsaechlich an den falschen Typen oder flascher Verwendung der Typen zu tun hat. Vielleicht muesste man diesen Punkt ( Typen und Anwendung ) mal als eigenes Kapitel auf der Mikrocontroller Seite einrichten. Gruss Roger
Der Klassiker K&R: http://en.wikipedia.org/wiki/The_C_Programming_Language_(book) Gibts auch in deutsch. Ansonsten: http://www.open-std.org/JTC1/SC22/WG14/www/docs/n1124.pdf
Roger Koller wrote: > Ich kann ein wenig C programmieren, aber die meisten Fehler passieren > wie ich auch bei anderen Leuten im Forum gesehen haben Aufgrund von > falschen Typisierungen. Nein. Die meisten Fehler passieren, weil die meisten Leute glauben sie könnten eine Programmiersprache ohne vernünftige Unterlagen lernen. Ein paar Schlüsselwörter ohne Tippfehler hinzuschreiben zu können ist noch nicht mal 5% der Programmierung. Man kann ohne Fremdsprachenkenntnisse, nur mit einem Wörterbuch bewaffnet, in ein fremdes Land fahren und dort so einigermassen zurechtkommen. Aber nur deswegen, weil die Einheimischen dort mitdenken und zu erraten versuchen was du willst, wenn du ihnen Wörter vorwirfst. Ein Computer denkt nicht mit, er macht das was du ihm sagst. Und wenn du zwar die Wörter in fast der richtigen Reihenfolge benutzt, aber die Regeln der Sprache nicht beachtest, dann macht er zwar etwas, aber nicht das was du gerne hättest. > Aber dies ist meiner Meinung nach das A und O beim Programmieren. Das A und O der Programmierung ist, das man sein Handwerk beherrscht. Und zwar von den Grundlagen weg. > der Code was anderes macht, was ich will, was aber Hauptsaechlich an den > falschen Typen oder flascher Verwendung der Typen zu tun hat. Wenn du damit dann endlich mal klarkommst, hast du noch nicht mal 10% dessen, was du als gestandener Programmierer können musst. Basis-Datentypen, ihre Verwendung und nach welchen Regeln sie verarbeitet werden, sind absolute Grundlagen. Da wartet noch vieles auf dich. > Der Klassiker K&R: Kriegt auch meine Stimme. Mit einem K&R im Regal ist man fürs Erste mal gut ausgestattet. Ein Buch hat gegenüber einem Online-Tutorial ein paar unschätzbare Vorteile: * Du kannst es immer in Griffweite bereit halten * Du kannst es neben deinen Programmierübungen neben der Tastatur aufgeschlagen lassen * Klassiker wie K&R sind weitgehend fehlerfrei, was man von vielen Online Tutorials nicht gerade behaupten kann * Du kannst dir für dich wichtige Stellen markieren * Man braucht keinen Browser * In den meisten Fällen sind sie viel umfangreicher als Online-Tutorials * Sie wurden von vielen Programmierern gelesen. Wenn du also eine Frage dazu hast, findet sich immer wer, der den Klassiker gelesen hat und den einen oder anderen Punkt schnell erläutern kann. Eben weil er das selbst schon mal durchgearbeitet hat.
Das Kürzel "K&R" steht mittlerweile sogar im Abkürzungs-Duden :) Noch ein Tip: K&P (Kernighan & Pike) "The Practice of Programming" http://cm.bell-labs.com/cm/cs/tpop/index.html CU PS: Nochwas von Pike http://herpolhode.com/rob/ugly.pdf
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.