Auf- und abrunden
Übersicht BlitzMax, BlitzMax NG Allgemein
wunderkindBetreff: Auf- und abrunden |
So, März 27, 2005 19:11 Antworten mit Zitat |
|
---|---|---|
Gibt's eine Funktion zum auf- und / oder abrunden von floating point types? | ||
Suco-XBetreff: ..... |
So, März 27, 2005 19:17 Antworten mit Zitat |
|
---|---|---|
Meinst du Ceil/Floor?
Mfg Suco |
||
Intel Core 2 Quad Q8300, 4× 2500 MHz, 4096 MB DDR2-Ram, GeForce 9600GT 512 MB |
wunderkind |
So, März 27, 2005 19:42 Antworten mit Zitat |
|
---|---|---|
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 |
So, März 27, 2005 20:39 Antworten mit Zitat |
|
---|---|---|
hmm.. schreib dir eine Funktion
Edit: BlitzBasic: [AUSKLAPPEN] Function Runde#(Zahl#) nicht getestet, müsst aber funzen |
||
wunderkind |
So, März 27, 2005 20:49 Antworten mit Zitat |
|
---|---|---|
Ich verwende eine eigene Funktion, wollte aber wissen, ob eine solche Funktion in standardmäßig existiert. Anyway... | ||
Waveblue |
So, März 27, 2005 21:10 Antworten mit Zitat |
|
---|---|---|
"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 ) |
||
This is 10% luck
20% skill 15% concentrated power of will 5% pleasure, 50% pain and 100% reason to remember the name |
MVB |
So, März 27, 2005 21:24 Antworten mit Zitat |
|
---|---|---|
Ich meine auch, dass das mit Int() gehen müsste. | ||
aquamonit.de|BlitzMax|MaxGUI |
wunderkind |
So, März 27, 2005 22:31 Antworten mit Zitat |
|
---|---|---|
Int() rundet immer ab.
Das Beispiel von Timo berücksichtigt übrigens keine negativen Zahlen. |
||
Waveblue |
So, März 27, 2005 22:37 Antworten mit Zitat |
|
---|---|---|
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 |
Mo, März 28, 2005 13:27 Antworten mit Zitat |
|
---|---|---|
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
Ist zwar umständlich, aber wenn es kein RND() gibt....
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 Gruss Mipooh |
||
P4, 3Ghz, 1GB Ram, MB Asus P4P800E, SATA und 2x IDE, Nvidia 5200, Sound USB Soundblaster, Win XP Home und Archlinux |
MVB |
Mo, März 28, 2005 13:57 Antworten mit Zitat |
|
---|---|---|
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? |
||
aquamonit.de|BlitzMax|MaxGUI |
DivineDominion |
Mo, März 28, 2005 14:31 Antworten mit Zitat |
|
---|---|---|
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 |
Mo, März 28, 2005 14:40 Antworten mit Zitat |
|
---|---|---|
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? |
||
aquamonit.de|BlitzMax|MaxGUI |
Demon |
Mo, März 28, 2005 17:22 Antworten mit Zitat |
|
---|---|---|
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 |
Mo, März 28, 2005 17:26 Antworten mit Zitat |
|
---|---|---|
BlitzBasic: [AUSKLAPPEN] erstellt immer die "richtig" gerundete Zahl, BlitzBasic: [AUSKLAPPEN] rundet immer ab, BlitzBasic: [AUSKLAPPEN] rundet immer auf. |
||
wunderkind |
Mo, März 28, 2005 17:34 Antworten mit Zitat |
|
---|---|---|
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 |
Mo, März 28, 2005 17:42 Antworten mit Zitat |
|
---|---|---|
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 |
Mo, März 28, 2005 17:49 Antworten mit Zitat |
|
---|---|---|
Das mit dem Runden geht auch einfacher .
Code: [AUSKLAPPEN] Local MyVar:Float = 0.6 Local Round:Int Round = Int(MyVar + 0.5) Print Round |
||
Don't drink and derive! |
MVB |
Mo, März 28, 2005 18:03 Antworten mit Zitat |
|
---|---|---|
@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 |
Mo, März 28, 2005 18:40 Antworten mit Zitat |
|
---|---|---|
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. |
Übersicht BlitzMax, BlitzMax NG Allgemein
Powered by phpBB © 2001 - 2006, phpBB Group