Kommastelle um 3 Stellen verschieben (ganz schnell)
-
Hallo,
ich suche eine Möglichkeit, effektiv eine Kommastelle (vom Double) zuverschieben.
Mit 1000 multiplizieren, ist eine Möglichkeit ,aber gibt es noch was Schnelleres? Weil das ganz soll viele Millionen mal geschehen. gibt es da ein Bitshift-Trick oder etwas Ähnliches.
genau genommen soll das gemacht werden:int I; double D; D=I; D*=0.001; /*..Rechnen mit D...*/ D*=1000; I=D;please help... danke
-
Mit 1000 multiplizieren, ist eine Möglichkeit ,aber gibt es noch was Schnelleres?
Nein, ich glaube nicht. Schon mal ueber Vektorisierung nachgedacht?
-
Wenn es nicht gerade 1000 sein muss, sondern auch 1024 sein darf, dann müsste das (selbst mit doubles) schneller gehen.
-
Für das Problem "Komma in Dezimaldarstellung drei Stellen nach links verschieben" wird es wohl kaum eine schnellere Lösung als Multiplikation mit 1000 geben. Wenn du uns allerdings verrätst, was du vorhast, könnte man an deinem allgemeinen Vorgehen evtl. noch was verbessern. Kommaverschiebung, noch dazu millionenfach, klingt vom numerischen Standpunkt her nämlich nach einer ziemlich sinnlosen Aktion, deshalb frage ich mich, wozu das gut sein soll.
-
Wenn es nicht gerade 1000 sein muss, sondern auch 1024 sein darf,
Ja, es darf auf etwas abweichen von 1000.
Mittlerweile denke ich aber auch das es wohl nicht schneller geht als mit Multiplikation
-
BILL schrieb:
Ja, es darf auf etwas abweichen von 1000.
Mittlerweile denke ich aber auch das es wohl nicht schneller geht als mit MultiplikationAusprobieren. Ich würd's mal mit frexp und ldexp probieren. Bei 'nem guten Compiler sind das schnelle Intrinsics.
double mit_1024_multiplizieren(double x) { int exp; double d = std::frexp(x,&exp); return std::ldexp(d,exp+10); }Gruß,
SP