BB - ungenau?
Übersicht

![]() |
BlatoloBetreff: BB - ungenau? |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
bei mir kommt da 2 raus... erst bei b=b+0.6 kommt 3 raus. | ||
![]() |
Blatolo |
![]() Antworten mit Zitat ![]() |
---|---|---|
Bei mir kommt dort ebenfalls 2 raus.
Rechnet jedes BB anders?^^ |
||
MasterK |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
@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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 ![]() |
||
DoomMaster |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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. |
||
![]() |
TheShadowModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
||
![]() |
TheShadowModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
ist normal | ||
AMD64 3500+ | GeForce6600GT 128MB | 1GB DDR | WinXPsp2 |
![]() |
Gossi |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
@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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
gemau, das war es, ich hab +0.5 gemacht und mich gewundert, dass es noch abrundet ![]() Paul |
||
Stratocaster black - Roland MicroCube
User posted image Girgl-World, wer's nich kennt, is' blöd! |
![]() |
Gossi |
![]() Antworten mit Zitat ![]() |
---|---|---|
@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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
@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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ist mal intressant sich die genauigkeit solcher Floats anzugucken:
MIN: 2.22507385851e-308 MAX: 1.79769313486e+308 Genauigkeit: 1.11022302463e-16 Große Zahlen ![]() 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 |
![]() |
TheShadowModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
es gibt 96 bit floats in c++/asm | ||
AMD64 3500+ | GeForce6600GT 128MB | 1GB DDR | WinXPsp2 |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group