Rätzelhafte Rundungsfehler...
Übersicht

![]() |
FirstdeathmakerBetreff: Rätzelhafte Rundungsfehler... |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ich wusste ja schon vorher das BB und BMax so ihre Schwierigkeiten mit dem Runden haben, aber das es so extrem ist?
Ich möchte einfach nur die Zahlen 2,4,8,16,32 etc. ausgeben, aber schon bei 2^3 gibt er mir, wenn ich mit i:int hochzähle, nicht 8, sondern 7 aus. Lösungen? Code: [AUSKLAPPEN] Rem
1. Frage: Warum kommt bei 2 ^ i [i = 3] nicht 8 sondern 7.9999999999999982 heraus? 2. Frage: Warum rundet der 7.9999999999999982 auf 7 runter? End Rem For i:Int = 1 To 3 Print 2^i Print Int(2^i) Next Rem [OUTPUT] Building BMaxFragen Compiling:BMaxFragen.bmx flat assembler version 1.64 3 passes, 2690 bytes. Linking:BMaxFragen.debug.exe Executing:BMaxFragen.debug.exe 2.0000000000000000 2 4.0000000000000000 4 7.9999999999999982 7 Process complete [/OUTPUT] end rem |
||
www.illusion-games.de
Space War 3 | Space Race | Galaxy on Fire | Razoon Gewinner des BCC #57 User posted image |
![]() |
mahe |
![]() Antworten mit Zitat ![]() |
---|---|---|
BMax hat keine Probleme beim Runden. Es Rundet bei Int() einfach immer ab. Man muss nur wissen, dass es so ist.
So stimmts: Code: [AUSKLAPPEN] For i:Int = 1 To 3
Print 2^i Print Int(2^i+0.5) Next |
||
ʇɹǝıdɯnɹɹoʞ ɹnʇɐuƃıs - ǝpoɥʇǝɯ-ɹoɹɹıɯ ɹǝp uı ,ɹoɹɹǝ, |
![]() |
Firstdeathmaker |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ist trotzdem blöde, weil ich nach einem 2^3 eine 8 erwarte, und keine 7!
Ist in meinen Augen ein ganz schwerer Fehler. Und fürs Abrunden ist doch Floor zuständig, nicht INT. Int sollte doch, wie bei BB, zum nächstliegenden Auf/Abrunden. Wozu braucht man sonst noch Floor? Ich meine, klar kann man das Problem umschiffen indem man da rumfrickelt (aber ich würde nicht 0.5 Addieren, das ist dann schon sehr hässlich, sondern Ceil) |
||
www.illusion-games.de
Space War 3 | Space Race | Galaxy on Fire | Razoon Gewinner des BCC #57 User posted image |
![]() |
FOODy |
![]() Antworten mit Zitat ![]() |
---|---|---|
@Frage 1:
Es wurde schon oft von Dreamora erwähnt: Es liegt an der veralteten MinGW version. Wenn du kein MaxGUI hast, müsste die aktuellste gehen. Gruß, FOODy EDIT: Frage 1: http://blitzbasic.com/Communit...opic=70236 |
||
BlitzMax + MaxGUI, 64-bit Arch Linux: Intel Core² E8500 | 8 GB Ram | GeForce GTX 460 · 1024 MB |
- Zuletzt bearbeitet von FOODy am Do, Jul 05, 2007 12:07, insgesamt 2-mal bearbeitet
![]() |
mahe |
![]() Antworten mit Zitat ![]() |
---|---|---|
Es steht sogar in der Doku dass INT immer Richtung Null rundet:
Zitat: the following values all print 0 as BlitzMax "rounds to zero"
' when converting from floating point to integer a=0.1;Print a a=0.9;Print a a=-0.1;Print a a=-0.9;Print a |
||
ʇɹǝıdɯnɹɹoʞ ɹnʇɐuƃıs - ǝpoɥʇǝɯ-ɹoɹɹıɯ ɹǝp uı ,ɹoɹɹǝ, |
![]() |
TheShadowModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
MinGW hat nix damit zu tun... So ist INT in BlitzMax... aber ich meine in C++ ist es auch so (?)
^ ist ein Double-Operator Zitat: Ich möchte einfach nur die Zahlen 2,4,8,16,32 etc. ausgeben
dann mach z.B. so for i=1 to 16 PRINT 1 SHL i next |
||
AMD64 3500+ | GeForce6600GT 128MB | 1GB DDR | WinXPsp2 |
Dreamora |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Int rundet garnet. Es schneidet einfach alles nach dem 0 ab und das kommt daher, dass das das C Verhalten ist und BM auf C Mathe Modulen basiert ![]() (Blitz3D und BlitzPlus hatten da als einzige mir bekannte Sprachen das kaputte Verhalten das es mathematisch gerundet hat bei Int(..) |
||
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen. |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group