Wertebereich eines Typs ausnutzen?

fadade

BIOS-Overclocker(in)
Hi,

ich habe eine Performance-Frage bezüglich der fast kompletten Ausnutzung des Wertebereichs vom Typ float (Gleitkommazahl).
Und zwar benötige ich für eine Simulation mehrere tausend Variablen die bis etwa 10^30 (Maximum bei float ist 10^38) gehen.
Nun frage ich mich, ob ich die Programmeinheit 1mktf welche auch dem Wert 1.0f entspricht nicht runterzusetzen auf 0.001f, sodass ich im Endeffekt bei einem Maximalwert von etwa 10^27 lande.

Unter 0.001f kann ich nicht gehen, da trotzdem dieses Maß an Genauigkeit benötigt wird,
Also macht das Sinn? :huh: Was ist performanter? Gibt es da überhaupt einen merklichen Unterschied bei diesen tausenden Variablen?

Ausprobieren kann ich beides nicht, da die Daten schon vorliegen und ich diese dann alle manuell ändern müsste. Aber ich hab halt noch die Möglichkeit das im Programm zu machen .... :)
 
Meiner Meinung nach kannste hier nicht viel optimieren, da bei Gleitkommazahlen einerseits der Wert (Genauigkeit), und der Exponent(Wertebereich) gespeichert werden. Da der Wertebereich von float dir ausreicht, kommt es wohl darauf an, ob dir jetzt die Genauigkeit von float ausreicht, oder ob du zu grösseren Variablen greifen musst.
Nun frage ich mich, ob ich die Programmeinheit 1mktf welche auch dem Wert 1.0f entspricht nicht runterzusetzen auf 0.001f, sodass ich im Endeffekt bei einem Maximalwert von etwa 10^27 lande.
Das hat wie gesagt wirklich keinen Sinn, da dir der Wertebereich ja ausreicht, aber vll hab ich den Kern des Problems noch nicht verstanden ^^
 
Meiner Meinung nach kannste hier nicht viel optimieren, da bei Gleitkommazahlen einerseits der Wert (Genauigkeit), und der Exponent(Wertebereich) gespeichert werden. Da der Wertebereich von float dir ausreicht, kommt es wohl darauf an, ob dir jetzt die Genauigkeit von float ausreicht, oder ob du zu grösseren Variablen greifen musst.

Das hat wie gesagt wirklich keinen Sinn, da dir der Wertebereich ja ausreicht, aber vll hab ich den Kern des Problems noch nicht verstanden ^^

Ich glaube er möchte wissen, ob das Programm schneller/besser läuft, wen er anstatt 19823498175198437098752934875,00000000 "runtergesetzten" Wert 19823498175198437098752934,87500000 verwendet. also die zahl ist einfach um den Faktor 1000 kleiner ....

Meine Meinung: NEIN, denn Zahl ist Zahl :D
(kp, ob der low-level-Kram mit den exponentenbits in den speicherbytes oder so, da mit beachtet werden muss :ugly: )
 
Ich glaube er möchte wissen, ob das Programm schneller/besser läuft, wen er anstatt 19823498175198437098752934875,00000000 "runtergesetzten" Wert 19823498175198437098752934,87500000 verwendet. also die zahl ist einfach um den Faktor 1000 kleiner ....

Genauso meinte ich es auch .... schwer sich manchmal auszudrücken :ugly:
@bingo: Wo steht das? xDDDD
Ich meine wir menschen tun uns ja recht schwer je größer die Zahlen sind, aber das Menschen != Computer ist klar :D Nur dachte ich, dass dort auch irgendwie auswirkungen spürbar wären (gibt ja diesen Trick beim WIndows-Rechner mal Fakultät von 99999999999999999999999999999 zu machen, auch wenn das was anderes ist). Oder beziehst du dich jetzt nur auf die Verringerung um 1000 einheiten?


Gut, dann werde ich es erstmal so probieren.
Weitere Meinungen trotzdem gern :)
 
Also die FPU bei x86 arbeitet intern mit 80-Bit Präzision (double extended precision; Als Datentypen aber meist nur float (32) und double (64) vorhanden). Welche Zahlen die FPU dabei berechnen muss ist ihr ziemlich egal (was anderes ist natürlich die Art der Berechnung - Add, Mul, etc.). Eine Beschleunigung ist nur zu erreichen, wenn man die Genauigkeit verringert (manchmal als "Fastmath" bezeichnet) oder bspw. auf spezielle CPU-Erweiterungen wie SSE zurückgreift.
 
Also bei Assembler Programmierung war das mit Nachkommastellen garnicht so easy...
Aber solange der Compiler es besser weiss als ich sollte es keine Auswirkung haben :ugly:
 
Da nutzt du dann aber wahrscheinlich die FPU nicht, und machst die Berechnungen für die FP-Operation auf der Integer-Unit. Also die einzelnen Rechenschritte, und das ist dann wirklich eklig :ugly:
 
Nene, also Assemblernutze ich dann doch nicht :lol: -> C#

@Skysnake: Jo genau mit diesem low-level kram kenn ich micht nicht so aus, deswegen die Frage (allerdings glaub ich schon, dass mit so einer Hochsprache die richtige Recheninheit genutzt wird :ugly:)
Läuft bisher aber ganz gut schonmal :)
 
Klar wird da die richtige Unit genutzt, dafür ist ja ne Hochsprache da. Die Sachen sollen für den Programmierer transparent sein, was so viel heißt wie: der bekommt davon einfach gar nichts mit ;)

Caches sind ja für dich auch transparent. Du nutzt die, ohne etwas davon zu wissen, und das ist auch gut so :D
 
Ja gut äh, das war ja noch ein echter Co-Prozessor, wobei du da in Hochsprachen auch nichts extra hast schreiben müssen, sofern damals die Hochsprachen schon per Compiler den Co-Prozessor unterstützt haben, was ich glaub am Anfang nicht der Fall war. Bin mir da aber nicht sicher. Später aber auf jeden Fall.

Assembler haste halt die A-Karte, und musst halt selbst schauen, was du machst :D
 
Zurück