BB - ungenau?

Übersicht BlitzBasic Allgemein

Gehe zu Seite 1, 2  Weiter

Neue Antwort erstellen

Blatolo

Betreff: BB - ungenau?

BeitragSo, Apr 25, 2004 21:46
Antworten mit Zitat
Benutzer-Profile anzeigen
Kann es sein das BB ungenaue Werte/Zahlen hat?
Wenn ich z.B. folgenden Code ausführe:
Code: [AUSKLAPPEN]
For i#= 0 To 1 Step 0.01
Print i
Next
WaitKey()

Dann sind die ersten Werte richtig aber die letzten sind falsch/ungenau.
z.B. 0.83 und danach 0.839999
Kommt das bei euch auch oder nur bei mir?
Habs an zwei comps getestet: beide der gleiche Fehler
Aber der Fehler tritt nicht nur bei diesem code auf.
Woran könnte das liegen und wie kann man das umgehen?
Außerdem funktioniert bei mir die mod funktion nicht richtig wenn ich float Zahlen benutze.
Code: [AUSKLAPPEN]
Print 7.5 Mod 0.1
WaitKey()

dort kommt bei mir als Ergebnis 0.99999 obwohl 0 rauskommen sollte.
Habe dazu aber schon eine eigene mod funktion gebastelt die funktioniert.
Allerdings funktioniert diese auch nur wenn richtige werte übergeben werden, was aber durch den erst genannten Fehler manchmal nicht der Fall ist.
Kann mir jemand diese ganzen Fehler und Ungenauigkeiten erklären?

Paul

BeitragSo, Apr 25, 2004 21:51
Antworten mit Zitat
Benutzer-Profile anzeigen
Ne Antwort hab ich nicht, aber ne ähnliche Beobachtung, so rundet BB falsch.
b ist KEINE Floatvariable
b=2

b=b+0.4

kommt raus : 3 da ist doch komisch oder?

Paul
Stratocaster black - Roland MicroCube
User posted image
Girgl-World, wer's nich kennt, is' blöd!

sami

BeitragSo, Apr 25, 2004 21:56
Antworten mit Zitat
Benutzer-Profile anzeigen
bei mir kommt da 2 raus... erst bei b=b+0.6 kommt 3 raus.

Blatolo

BeitragSo, Apr 25, 2004 22:08
Antworten mit Zitat
Benutzer-Profile anzeigen
Bei mir kommt dort ebenfalls 2 raus.
Rechnet jedes BB anders?^^
 

MasterK

BeitragSo, Apr 25, 2004 22:09
Antworten mit Zitat
Benutzer-Profile anzeigen
normalerweise hast du auch keine absolute genauigkeit bei kommazahlen. es muss nunmal gerundet werden. damit hat man auch in anderen sprachen zu kämpfen. man kann die genauigkeit höchstens erhöhen, so dass man zB in c++ doubles statt normalen floats verwendet.
damit muss man leben bzw versuchen das problem durch geschickte programmierung zu umgehen
 

junky

BeitragSo, Apr 25, 2004 22:55
Antworten mit Zitat
Benutzer-Profile anzeigen
@Paul, also das ist nun mal wirklich komisch ... des dürfte eigentlich nit passieren

aber ansonsten wie schon MasterK sagt ...
in deinem Fall Blatolo könnte man z.B. folgenden Code benutzen
Code: [AUSKLAPPEN]

For i=0 To 100
   Print i/100.0
Next
WaitKey()
gestern stand ich noch vorm Abgrund
heute bin ich einen Schritt weiter...

Paul

BeitragMo, Apr 26, 2004 15:47
Antworten mit Zitat
Benutzer-Profile anzeigen
komisch...... vielleicht hakts ja auch an ner anderen Stelle im Source ^_^

Paul
Stratocaster black - Roland MicroCube
User posted image
Girgl-World, wer's nich kennt, is' blöd!

Garfield

BeitragMo, Apr 26, 2004 17:00
Antworten mit Zitat
Benutzer-Profile anzeigen
also bei mir (BBPlus)

b=b + 0.4
b=b + 0.5

jeweils = 2

b=b + 0.6 = 3

der rundet also bei Komma 5 noch ab

hier hört die Genauigkeit der FLOAT Variablen auf :
Code: [AUSKLAPPEN]

Graphics 800,600
b#=200

b=b+0.0005


Text 100,100, b
Flip

WaitKey()

nach meinen 2 jährigen Programmiererfahrungen lässt die math. Genauigleit von BB doch zu wünschen übrig.
Wenn man die Flugbahn eines Spaceshuttles damit berechnen würde, würde der auf dem Rückweg statt in Florida in Südafrika landen Wink Abhilfe wirds wohl erst in BMax geben, obwohl ich noch nichts darüber gelesen habe, das da dann auch DoubleFloats möglich sind. Ich programmiere grade einen Mathetrainer mit Dreiecksberechnungnen aller Art und da wirds schon manchmal ganz schön ungenau, vor allen Dingen dann, wenn man dann pixelgenau auch noch zeichnen will und sich die Kanten tatsächlich auch berühren sollen.
 

DoomMaster

BeitragMo, Apr 26, 2004 18:06
Antworten mit Zitat
Benutzer-Profile anzeigen
ja aber wie MasterK schon sagte es gibt bei komma zahlen in verbindung mit computern keine genauen ergebnisse das liegt an der Binär Arythmekit die der computertechnik zugrunde liegt, man kann da nur triksen um den benutzer vorzugaugeln eine genaue zahl zu haben aber richtig wird es nie sein.

Markus2

BeitragMo, Apr 26, 2004 18:46
Antworten mit Zitat
Benutzer-Profile anzeigen
Bei Textausgabe werden die Zahlen quasi mit Str$ umgewandelt
und können daher anders aussehen wie sie eigentlich intern gespeichert sind .

Note: during the conversion, all 6 decimal places will be represented on floating point number conversions.

TheShadow

Moderator

BeitragMo, Apr 26, 2004 19:00
Antworten mit Zitat
Benutzer-Profile anzeigen
hat doch nix mit BB zutun - sondern mit prozessor - in C++ ist es genau so, wenn du floats verwendest

1) Float kann max. 6 Kommastellen speichern
2) Je größer die Zahl wird, desto weniger Kommastellen können gespeichert werden
AMD64 3500+ | GeForce6600GT 128MB | 1GB DDR | WinXPsp2

Markus2

BeitragDi, Apr 27, 2004 1:02
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich meinte z.B. sowas hier .

a#=1.0

DebugLog a

a=a+0.000123

DebugLog a

a=a-0.000123

DebugLog a

WaitKey
End


1.0
1.00012
1.0

TheShadow

Moderator

BeitragDi, Apr 27, 2004 18:00
Antworten mit Zitat
Benutzer-Profile anzeigen
ist normal
AMD64 3500+ | GeForce6600GT 128MB | 1GB DDR | WinXPsp2

Gossi

BeitragDi, Apr 27, 2004 18:20
Antworten mit Zitat
Benutzer-Profile anzeigen
Vielleicht kann ja mal jemand der Lust und Zeit hat ne Funktionen-Sammlung machen, die einen Type steuert, der extrem genaue Kommestellen speichern kann (ganz nach diesem *100 /100 Prinzip). Das ist dann zwar Speicheraufwändig, aber genau (wers brauch). In sonem slbstgemachten Type können dann beliebig Kommastellen exakt gespeichert werden. Nur mal ne Idee. Oder gibt's sowas schon?
Alle Wasser laufen ins Meer, doch wird das Meer nicht voller; an den Ort, dahin sie fließen, fließen sie immer wieder. (...) Was geschehen ist, eben das wird hernach sein. Was man getan hat, eben das tut man hernach wieder, und es geschieht nichts neues unter der Sonne. Geschieht etwas, von dem man sagen könnte: "Sieh, das ist neu"? Es ist längst vorher auch geschehen in den Zeiten, die vor uns gewesen sind.

Markus2

BeitragDi, Apr 27, 2004 18:39
Antworten mit Zitat
Benutzer-Profile anzeigen
@Gossi

Dann besser ne runden Funk. wie sowas ,
sonnst wird das zu umständlich .

Function R2#(x#)

Return Int(x*100.0)/100.0

End Function

;--------------------------------------------------------

Function R4#(x#)

Return Int(x*10000.0)/10000.0

End Function

Paul

BeitragDi, Apr 27, 2004 20:41
Antworten mit Zitat
Benutzer-Profile anzeigen
gemau, das war es, ich hab +0.5 gemacht und mich gewundert, dass es noch abrundet Laughing

Paul
Stratocaster black - Roland MicroCube
User posted image
Girgl-World, wer's nich kennt, is' blöd!

Gossi

BeitragMi, Apr 28, 2004 8:15
Antworten mit Zitat
Benutzer-Profile anzeigen
@markus2

für den "alltagsgebrach" reicht die funktion. Ich meinte aber, falls mal wirklich jemand bis zu 100 Kommastellen GENAU speichern muss, dann wär das doch mal ein interessantes Projekt, sowas zu machen.
Alle Wasser laufen ins Meer, doch wird das Meer nicht voller; an den Ort, dahin sie fließen, fließen sie immer wieder. (...) Was geschehen ist, eben das wird hernach sein. Was man getan hat, eben das tut man hernach wieder, und es geschieht nichts neues unter der Sonne. Geschieht etwas, von dem man sagen könnte: "Sieh, das ist neu"? Es ist längst vorher auch geschehen in den Zeiten, die vor uns gewesen sind.

Markus2

BeitragMi, Apr 28, 2004 12:37
Antworten mit Zitat
Benutzer-Profile anzeigen
@Gossi

In BlitzMax bekommen wir evtl. 64 Bit Floats .
Habe Mark dazu mal ne mail geschrieben das man
keine Physiksimulationen in BB schreiben kann .

regaa

BeitragMi, Apr 28, 2004 15:43
Antworten mit Zitat
Benutzer-Profile anzeigen
Ist mal intressant sich die genauigkeit solcher Floats anzugucken:

MIN: 2.22507385851e-308
MAX: 1.79769313486e+308
Genauigkeit: 1.11022302463e-16

Große Zahlen Laughing

Gibts in irgendeiner Sprache, schon mehr als 8Byte floats?
UltraMixer Professional 3 - Download
QB,HTML,CSS,JS,PHP,SQL,>>B2D,B3D,BP,BlitzMax,C,C++,Java,C#,VB6 , C#, VB.Net

TheShadow

Moderator

BeitragMi, Apr 28, 2004 17:44
Antworten mit Zitat
Benutzer-Profile anzeigen
es gibt 96 bit floats in c++/asm
AMD64 3500+ | GeForce6600GT 128MB | 1GB DDR | WinXPsp2

Gehe zu Seite 1, 2  Weiter

Neue Antwort erstellen


Übersicht BlitzBasic Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group