- 3D-Druck Einstieg und Tipps         
Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 16

Thema: Rechenproblem mit Single

  1. #1
    Erfahrener Benutzer Roboter Experte Avatar von Tido
    Registriert seit
    14.11.2006
    Ort
    OWL
    Alter
    47
    Beiträge
    622

    Rechenproblem mit Single

    Anzeige

    Praxistest und DIY Projekte
    Hi,

    ich stolpere gerade über ein Bascom-Rechen-Problem:

    Es soll mit folgendem Programm der ADC-Wert in die akkuspannung zurückgerechnet werden, gerundet auf eine Nachkommastelle.

    Warum ergibt die Berechnung 162,0 / 10 = 16,1999999 ?
    Wie kann man das Problem lösen?

    Dummy ist ein Word, Akku vom Typ Single:
    Code:
    Do
    Dummy = Getadc(0)
    Akku = Dummy
    Print "Anfangswert : " ; Akku
    Akku = Akku * 0.195
    Print Dummy ; " * 0,195 = " ; Akku
    Akku = Round(akku)
    Print "gerundet: " ; Akku
    Akku = Akku / 10
    Print "geteilt durch 10: " ; Akku
    Loop
    Ausgabe dazu:
    Code:
    Anfangswert : 832.0
    832 * 0,195 = 162.239990233
    gerundet: 162.0
    geteilt durch 10: 16.199998853
    MfG
    Tido

    ---------------------------------------------------
    Have you tried turning it off and on again???
    ---------------------------------------------------

  2. #2
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    19.07.2007
    Alter
    59
    Beiträge
    1.080
    Hallo Tido,

    selbst Taschenrechner liegen manchmal daneben, und so weit ist 16.2 ja nicht von 16.199999999 entfernt. Genau genug ists auf jeden Fall.
    Wenn du rundest, dann mache es nicht "mittendrin" und rechne dann mit diesem Ergebnis, sondern runde erst am Ende.
    Einfach mal die Funktionen "Format" und "Fusing" anschauen, vielleicht eignet sich eine davon besser für dein Vorhaben. (Habe grade kein Bascom etc. griffbereit, deshalb diese waage antwort, sorry)

    Gruß MeckPommER
    Mein Hexapod im Detail auf www.vreal.de

  3. #3
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    30.12.2008
    Beiträge
    1.427
    probier mal double ansonstenn 1/3= 0,333 periode 0,333 periode *3 <3
    mach mal nach dem runden akku=int(akku) ich weiß nicht was round alles auser runden mit akku anstellt

  4. #4
    Erfahrener Benutzer Roboter Experte Avatar von Tido
    Registriert seit
    14.11.2006
    Ort
    OWL
    Alter
    47
    Beiträge
    622
    Hi,

    wenn ich erst am Schluß runde (also 16,2xxxx) ergibt sich ein Wert von 16,0. Das ist ja noch schlimmer als 16,199999. Da ich aber nur eine Nachkommastelle anzeigen lassen kann (kein Platz), ergibt sich 16,1 und dass wäre "nicht genau genug".
    Ich habe auch schon probiert, die 162,0 der Single-Variable erst in eine Word-Variable zu schieben, dann zurück, aber das Ergebnis bleibt "falsch" bei 16,1999999.

    Noch jemand eine Idee dazu?
    MfG
    Tido

    ---------------------------------------------------
    Have you tried turning it off and on again???
    ---------------------------------------------------

  5. #5
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    30.12.2008
    Beiträge
    1.427
    hast du das schin mit anderen werten probiert? wenn das über all so ist dann +0,1

  6. #6
    Erfahrener Benutzer Robotik Visionär
    Registriert seit
    26.11.2005
    Ort
    bei Uelzen (Niedersachsen)
    Beiträge
    7.942
    Wenn bei der Ausgabe mit einer Nachkommastelle einfach nur abgeschnitten wird, also aus 6.199 wird 6.1 , dann sollte man einfach 0.05 dazuaddieren um eine Normale Rundung zu bekommen.

  7. #7
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    16.02.2006
    Beiträge
    1.113
    Was hälst du denn hiervon:

    Do
    Dummy = Getadc(0)
    Akku = Dummy
    Akku = Akku * 0.0195
    Print Fusing(akku , "##.#")
    Loop

  8. #8
    Erfahrener Benutzer Roboter Experte Avatar von Tido
    Registriert seit
    14.11.2006
    Ort
    OWL
    Alter
    47
    Beiträge
    622
    Ich probiere morgen mal ein wenig rum, habe i.M. kein Bascom hier.

    16,19999 ergibt gerundet zwar auch 16,2, aber dann muss ja zusätzlich am Ende etwas gerundet werden was eigentlich genau aufgeht.
    Irgendwie will mir das nicht in den Kopf...

    EDIT: Wenn ich mir die Hilfe zu "Fusing" ansehe, dann wird mir schlecht:

    'now assign a value to the single

    S = 123.45678

    'when using str() you can convert a numeric value into a string

    Z = Str(s)

    Print Z 'prints 123.456779477

    Selbst das funktioniert "nicht richtig"...
    MfG
    Tido

    ---------------------------------------------------
    Have you tried turning it off and on again???
    ---------------------------------------------------

  9. #9
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    30.12.2008
    Beiträge
    1.427
    hast du das schin mit anderen werten probiert? wenn das über all so ist dann +0,1

  10. #10
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    16.02.2006
    Beiträge
    1.113
    Zitat Zitat von Tido
    EDIT: Wenn ich mir die Hilfe zu "Fusing" ansehe, dann wird mir schlecht:

    'now assign a value to the single

    S = 123.45678

    'when using str() you can convert a numeric value into a string

    Z = Str(s)

    Print Z 'prints 123.456779477

    Selbst das funktioniert "nicht richtig"...
    Das kannst du aber erwarten, wenn du Dezimalzahlen in ein anderes Format überträgst. Intern arbeiten die meisten Computer nun mal binär. Da gibt es für die Zahl 123.45678 keine Darstellung mit der vorgegebenen Anzahl Binärstellen. Das ist kein Bascom Problem.
    Du rechnest hier mit einer maximalen Anzahl von 1024 verschiedenen Werten und beklagst dich über einen Fehler auf der 1/10.000.000stel Stelle.

Seite 1 von 2 12 LetzteLetzte

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

Labornetzteil AliExpress