Auf- und abrunden

Übersicht BlitzMax, BlitzMax NG Allgemein

Gehe zu Seite 1, 2  Weiter

Neue Antwort erstellen

wunderkind

Betreff: Auf- und abrunden

BeitragSo, März 27, 2005 19:11
Antworten mit Zitat
Benutzer-Profile anzeigen
Gibt's eine Funktion zum auf- und / oder abrunden von floating point types?

Suco-X

Betreff: .....

BeitragSo, März 27, 2005 19:17
Antworten mit Zitat
Benutzer-Profile anzeigen
Meinst du Ceil/Floor?
Mfg Suco
Intel Core 2 Quad Q8300, 4× 2500 MHz, 4096 MB DDR2-Ram, GeForce 9600GT 512 MB

wunderkind

BeitragSo, März 27, 2005 19:42
Antworten mit Zitat
Benutzer-Profile anzeigen
Gebraucht wird ein Mix aus beidem. 0.0 bis < 0.5 abrunden, den Rest aufrunden. Scheint es aber nicht zu geben. Oder ich habe Tomaten auf den Augen (5 MB).
 

Timo

BeitragSo, März 27, 2005 20:39
Antworten mit Zitat
Benutzer-Profile anzeigen
hmm.. schreib dir eine Funktion Very Happy

Edit:

BlitzBasic: [AUSKLAPPEN]
Function Runde#(Zahl#)
Local temp#
temp# = Floor(Zahl#)
If (Zahl# - temp#) < 0.5 Then
Return temp#
Else
Return Ceil(Zahl#)
EndIf
End Function


nicht getestet, müsst aber funzen

wunderkind

BeitragSo, März 27, 2005 20:49
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich verwende eine eigene Funktion, wollte aber wissen, ob eine solche Funktion in standardmäßig existiert. Anyway...

Waveblue

BeitragSo, März 27, 2005 21:10
Antworten mit Zitat
Benutzer-Profile anzeigen
"floating point types?" wasndas?

meines Wissens rundet die einfache Umwandlung in Integer so wie du´s haben willst!
(schlagt mich nicht, wenns nicht stimmt, ich hab kein BlitzMax Wink )
This is 10% luck
20% skill
15% concentrated power of will
5% pleasure, 50% pain
and 100% reason to remember the name

MVB

BeitragSo, März 27, 2005 21:24
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich meine auch, dass das mit Int() gehen müsste.
aquamonit.de|BlitzMax|MaxGUI

wunderkind

BeitragSo, März 27, 2005 22:31
Antworten mit Zitat
Benutzer-Profile anzeigen
Int() rundet immer ab.

Das Beispiel von Timo berücksichtigt übrigens keine negativen Zahlen.

Waveblue

BeitragSo, März 27, 2005 22:37
Antworten mit Zitat
Benutzer-Profile anzeigen
wunderkind hat Folgendes geschrieben:
Int() rundet immer ab.

Das Beispiel von Timo berücksichtigt übrigens keine negativen Zahlen.

also bei mir nicht, ab 0.6 rundet Blitz3D auf!
This is 10% luck
20% skill
15% concentrated power of will
5% pleasure, 50% pain
and 100% reason to remember the name
 

mipooh

BeitragMo, März 28, 2005 13:27
Antworten mit Zitat
Benutzer-Profile anzeigen
Ab 0.6 ist natürlich mathematisch unkorrekt.
Ich habs mal mit Addition von 0,5 und dann INT gemacht, das geht korrekt.
Code: [AUSKLAPPEN]
i:Float=1.49
j:Float=1.5
Print i
Print j
a:Int=0
b:Int=0
a=Int(i+0.5)
b=Int(j+0.5)

Print a
Print b

Ist zwar umständlich, aber wenn es kein RND() gibt....

Gruss
Mipooh
P4, 3Ghz, 1GB Ram, MB Asus P4P800E, SATA und 2x IDE, Nvidia 5200, Sound USB Soundblaster, Win XP Home und Archlinux

MVB

BeitragMo, März 28, 2005 13:57
Antworten mit Zitat
Benutzer-Profile anzeigen
Mir ist grad beim rumprobieren etwas seltsames aufgefallen.

Bei folgendem kleinen Code würd bei mir "0.600000024" geprinted.
Code: [AUSKLAPPEN]

A:Float = 0.6
Print A:Float

Dasselbe mit Double und es kommt "0.60000002384185791" raus.
Ist das bei euch auch so? Woran kann das liegen? Rolling Eyes
aquamonit.de|BlitzMax|MaxGUI

DivineDominion

BeitragMo, März 28, 2005 14:31
Antworten mit Zitat
Benutzer-Profile anzeigen
Oh mann...

Der Prozessor kann mit Kommazahlen nicht so genau Arbeiten wie du auf Papier hoffentlich. Der Hut ist so alt, dass er schon beim angucken zerfällt.

Int rundet immer ab. Die Integer-Funktion in der Mathematik ist auch genau so definiert, dass jede Zahl zwischen zwei Ganzzahlen auf die nächstkleinere ganze Zahl abgerundet wird.
christian.tietze@gmail.com - https://christiantietze.de
macOS

MVB

BeitragMo, März 28, 2005 14:40
Antworten mit Zitat
Benutzer-Profile anzeigen
Ok. Danke. Das wusste ich nicht. Aber welchen Sinn hat es dann mit Double zu rechnen, wenn es eh nicht genau ist. Dnhat das doch gar keinen Sinn. Der einige Vorteil von Double zu Float exestiert damit eigentlich garnicht. Oder? Confused
EDIT: Und wiso rundet Int() bei Blitz3D nicht immer ab?
aquamonit.de|BlitzMax|MaxGUI
 

Demon

BeitragMo, März 28, 2005 17:22
Antworten mit Zitat
Benutzer-Profile anzeigen
Klar macht das Sinn mit Double zu arbeiten, weils eben Doppelt so genau ist.
Wenn du 100% genau sein willst, musst du auf Fixpunkt umsteigen (d.h. mit Integer rechnen, aber einige Bits als Nachkommateil interpretieren).
Mit dem Prozessor hat das an sich gar nicht so viel zu tun, es liegt nur an der Repräsentation der Fließkommazahlen.
Don't drink and derive!

Artemis

BeitragMo, März 28, 2005 17:26
Antworten mit Zitat
Benutzer-Profile anzeigen
BlitzBasic: [AUSKLAPPEN]

Int()
erstellt immer die "richtig" gerundete Zahl,

BlitzBasic: [AUSKLAPPEN]

Floor()
rundet immer ab,

BlitzBasic: [AUSKLAPPEN]

Ceil()
rundet immer auf.

wunderkind

BeitragMo, März 28, 2005 17:34
Antworten mit Zitat
Benutzer-Profile anzeigen
Irrtum. Int() rundet unter BMAX bei positiven Zahlen immer ab, bei negativen Zahlen auf. Ist zumindest bei meinem 1.05'er Core so.

Bei Nacht und Nebel runtergeschrieben (Teil eines sys objects):
Code: [AUSKLAPPEN]
   Method round:Int(_value : Float)
      Local floor_value : Float = Floor(_value)
      Local ceil_value = Ceil(_value)

      If _value > 0 Then
         If _value - floor_value < 0.5 Then
            Return floor_value
         Else
            Return ceil_value
         End If

      Else
         If _value - ceil_value > -0.5 Then
            Return ceil_value
         Else
            Return floor_value
         End If

      End If
   End Method

Artemis

BeitragMo, März 28, 2005 17:42
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich meinte das auf den Post von MVB bezogen:
MVB hat Folgendes geschrieben:
Ok. Danke. Das wusste ich nicht. Aber welchen Sinn hat es dann mit Double zu rechnen, wenn es eh nicht genau ist. Dnhat das doch gar keinen Sinn. Der einige Vorteil von Double zu Float exestiert damit eigentlich garnicht. Oder?
EDIT: Und wiso rundet Int() bei Blitz3D nicht immer ab?
 

Demon

BeitragMo, März 28, 2005 17:49
Antworten mit Zitat
Benutzer-Profile anzeigen
Das mit dem Runden geht auch einfacher Smile.

Code: [AUSKLAPPEN]

Local MyVar:Float = 0.6
Local Round:Int

Round = Int(MyVar + 0.5)

Print Round
Don't drink and derive!

MVB

BeitragMo, März 28, 2005 18:03
Antworten mit Zitat
Benutzer-Profile anzeigen
@Demon: Wenn der Prozessor(oder was auch immer) aus 0.6 bei Float "0.600000024" und bei Double "0.60000002384185791" rauskommt, dann ist das für mich nicht doppelt so genau.

@JonasCleve: Das ist mir schon klar. Aber Divi hat gesagt, dass Int immer abrundet und desshalb hab ich gefragt, warum das bei Blitz3D anders ist.
aquamonit.de|BlitzMax|MaxGUI
 

Dreamora

BeitragMo, März 28, 2005 18:40
Antworten mit Zitat
Benutzer-Profile anzeigen
Es gibt unzählige Zahlen die Float garnicht darstellen kann. Sobald Pi / Sin / Cos etc rein kommen, wird Float im vergleich zu Double sehr schnell extrem ungenau wenn sie verkettet werden.
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen.

Gehe zu Seite 1, 2  Weiter

Neue Antwort erstellen


Übersicht BlitzMax, BlitzMax NG Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group