Gast
#2104673
hallo, die funktion:
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
8 | |
9 | |
auf gerufen wird sie wie folgt
1 | |
wenn ich es mit dem wert 1000 (ist 1mm/sek) mache, geht es. bei mehr oder weniger kommt nur mist raus. woran kann das liegen?
|
Anzeige
|
Funktion liefert falsche werte
Gast
#2104673
hallo, die funktion:
auf gerufen wird sie wie folgt
wenn ich es mit dem wert 1000 (ist 1mm/sek) mache, geht es. bei mehr oder weniger kommt nur mist raus. woran kann das liegen?
Gast
#2104790
(1/Value) ist für Value > 1 immer 0 Ich komme bei deinen Werten auf 0.6irgendwas und das ist als unsigned long auch 0.
Gast
#2105612
ja, schon. aber das ist mitten in der berrechnung. da sollte das value als unsigned gesehen werden. die ausgabe "1/unsigned" aber nicht. steht doch in klammern und der variabelen "Value" wird der wert nicht zugewiesen. oder sehe ich das total falsch? kask schrieb: > aber das ist mitten in der berrechnung. da sollte das value als unsigned > gesehen werden. die ausgabe "1/unsigned" aber nicht. Das hat nichts mit "unsigned" zu tun, sondern damit, daß Du hier integer-Arithmetik betreibst. Und für die ist 1/2 = 0.
Gast
#2105656
ok, aber was muß ich machen damit es funktioniert und die funktion mir eine (unsigned) long ausgibt aber mit z.b. einer gleitkommazahl rechnet?
Gast
#2105662
kask schrieb: > aber mit z.b. einer gleitkommazahl rechnet? warum willst du mit gleitkommazahl rechen wenn du am ende long rausbekommen willst? Wechen wert erwartest du denn?
Gast
#2105670
ich erwarte wenn ich folgendes eingebe z.b.: value = 500 das ca. 1308 rauskommt, value = 1000 das ca. 654 rauskommt, value = 2000 das ca. 327 rauskommt. so wie es jeder taschenrechner macht. mehr will ich nicht ;) kask schrieb: > ich erwarte wenn ich folgendes eingebe z.b.: > value = 500 das ca. 1308 rauskommt, > value = 1000 das ca. 654 rauskommt, > value = 2000 das ca. 327 rauskommt. > > so wie es jeder taschenrechner macht. mehr will ich nicht ;) komisch, mein Taschenrechner kommt auf 1.308, 0.654 und 0.327 und damit als long 1, 0 und 0 und hat es einen tieferen Sinn
statt gleich
zu schreiben?
Gast
#2105678
Dann Stimmen deine Werte aber nicht:
1000000 / Zykluszeit = 62745000
62745000 / 96000 = 653,6
653,6 * (1/1000) = 0,653
Du musst Umstellen und Klammern:
1000000 Zykluszeit Tickspermeter * (1/Value) =
1000000 / ( Zykluszeit Tickspermeter Value) =
1000000 Zykluszeit (Tickspermeter * Value)
Wobei du 1000000 / Zykluszeit evtl. schon vorher ausrechnen kannst.
Denn deine Zykluszeit sieht sehr berechnet aus :-)
Gast
#2105680
kask schrieb: > mehr will ich nicht dann mach es dem compiler doch nicht so schwer return 653594 / value; (runden fehlt noch)
Gast
#2105695
ups, da is was faul. richtiger wäre
oder
wobei es sicher besser wäre "1000000000 / Zykluszeit" vorher zu berrechnen. macht sinn ;) und jepp, die zykluszeit is berrechnet bzw. gemessen. 100%ige genauigkeit ist nicht primär. aber haste auch wieder recht. feste werte und gut ist. wenn sich die hardware ändert kann man auch neu compilieren ;)
Gast
#2105703
jepp runden fehlt noch..das ist das nächste thema..wie? ich suche mir in sachen c nen kippar***. bei simpelen sachen. so wie ich es erlesen habe macht er es automatisch wenn ich der ausgabe ganzzahl eine gleitkommazahl zuweise. (wie in bascom z.b.)
Gast
#2105707
Aber auch bei
würde 0 rauskommen, da (1/value) als Ganzzahlwert berechnet wird, und das ist 0.
macht das was du brauschst. Oder du hast ein Zykluszeit als #define. Dann rechnet der Compiler das schon vorher aus.
Gast
#2105716
ich brauche aber die "1/".. weil sonst wir der ausgage wert immer größer bei größer werden der eingabe. es muß aber kleiner werden bei größer werdender eingabe.
Gast
#2105723
okok, dank dir hast recht ich falsch gedacht ;)
Gast
#2105730
kask schrieb: > ich brauche aber die "1/".. Schmarren.
Gast
#2105743
kask schrieb
> ich brauche aber die "1/"..
Dein Problem war nicht unbedingt die 1/ sondern die Klammern drum herum.
Antwort schreibenBitte melde dich an, um einen Beitrag zu schreiben. |
Anzeige
|