Arithmetik bei Blitz3D

Übersicht BlitzBasic Blitz3D

Neue Antwort erstellen

 

sddsmhr

Betreff: Arithmetik bei Blitz3D

BeitragFr, Okt 12, 2012 17:17
Antworten mit Zitat
Benutzer-Profile anzeigen
BladeRunner hat Folgendes geschrieben:
sddsmhr hat mir heute per PM einen Nachweis für seinen legalen Blitzbesitz erbracht.
Damit sind ihm selbstredend hier wieder alle Tore offen! Willkommen zurück an Board.
Nachträglich natürlich Danke an dieser Stelle. Mein eigenes Projekt ruht momentan etwas, und insofern stellen sich mir momentan kaum Fragen im Zusammenhang mit Blitz3D. Aber ein, zwei Fragen kommen mir auch abseits der Projektentwicklung in den Sinn.

Wie läuft das eigentlich mit der Arithmetik bei Blitz3D ab? Ist das alles softwaremäßig implementiert? Scheint ja zumindest so. Ich entsinne mich bspw. noch an eine einfache Möglichkeit, die Maschinengenauigkeit zu ermitteln:

Code: [AUSKLAPPEN]
x#=1.
While Not(1.+x#=1.)
   x#=x#/2.
Wend
Print x#

Man erhält: x=5.96046e-008, was die Maschinengenauigkeit für Single-Precision ist. Nun ist allerdings bei den heutigen CPUs standardmäßig Double-Arithmetik implementiert. Ich weiß nicht, ob es hierfür relevant ist, aber in welcher Sprache wurde BB eigentlich geschrieben? C? Assembler? Thereotisch müssten doch solch triviale Operationen wie +,-,*,/ eigentlich auf die Funktionen der nächsthöheren Stufe bis hin zu den Operationen der CPU zurückgeführt werden...?

Propellator

BeitragFr, Okt 12, 2012 18:30
Antworten mit Zitat
Benutzer-Profile anzeigen
Wie in vielen anderen Sprachen ist der Float in BlitzBasic Single-Precision. Was du meinst ist der 'double' Datentyp (welcher jedenfalls in vielen Sprachen so genannt wird). Blitz3D als simplifizierte Sprache kennt diesen nicht. (BlitzMax jedoch schon)
Im Allgemeinen ist es nicht nötig Double zu benutzen wenn man Double nicht braucht - genau so würdest du nicht Long benutzen wenn deine Werte nie den Bereich der Standardgrösse eines normalen Integers überschreiten.

Blitz3D benutzt selbstverständlich die CPU-Instruktionen für Arithmetik, da es ja eine kompilierte Sprache ist. Oh, und Division, Quadratwurzel etc. haben ihre eigenen CPU-Instruktionen, keinen Grund immer alles auf die Addition zurückzuführen.
Propellator - Alles andere ist irrelephant.
Elefanten sind die Könige der Antarktis.
 

sddsmhr

BeitragSa, Okt 13, 2012 9:39
Antworten mit Zitat
Benutzer-Profile anzeigen
Hm... danke erst einmal. Ich sehe gerade auch, gemäß dem IEEE-754-Standard ist wohl auch die Single-Precision hardwaremäßig noch implementiert, nehme ich an? Also ist es bspw. nicht so, dass hier eine 32-Bit-Zahl durch 64-Bit-Register jejagt wird, sondern die CPU auch entsprechende Operationen für Single-Precision bereithält, sozusagen. Gut, dann macht es natürlich auch Sinn, hier auf Rechengenauigkeit zugunsten der Performance zu verzichten. Cool

Nova

BeitragSa, Okt 13, 2012 18:51
Antworten mit Zitat
Benutzer-Profile anzeigen
Jeder 64-Bit-Prozessor ist eigentlich "nur" ein 32-Bit-Prozessor, der zusätzlich erweiterte Befehle/Register für 64-Bit-Berechnungen hat. (Bin mir da nicht 100-prozentig sicher, aber kommt eigentlich gut als Verallgemeinerung hin.)

Allgemein ist es natürlich besser, sowohl Gleitkommazahlen mit 32 Bit als auch mit 64 Bit zu haben. Daher gibt es in BlitzMax Float und Double. Allgemein nutze ich persönlich da auch immer Double, da ich die höhere Genauigkeit eigentlich wesentlich besser als die Einsparung der Ressourcen bei Float - allerdings habe ich bisher auch keine Anwendung geschrieben, die wirklich zu viele Ressourcen verbraucht hat.
AMD Athlon II 4x3,1GHz, 8GB Ram DDR3, ATI Radeon HD 6870, Win 7 64bit

Neue Antwort erstellen


Übersicht BlitzBasic Blitz3D

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group