Zitat:
Auch wenn ich noch nicht wirklich verstehe, was Du da machst
Die unterschiedlichen Scales werden durch die Bits 29-30 bestimmt.
Um 29 Bits nach rechts verschoben ergeben sich (wenn Bit 31=0 ist) also 4 mögliche Werte, nämlich 0..3.
Da Bit 31 aber auch 1 sein könnte, ergibt die Verschiebung um 29 Bits 8 mögliche Werte, wobei die Werte 4..7 den Werten 0..3 entsprechen.
Das Array scale[0..7] enthält diese 2*4 möglichen Scales und mit
scale[CodZahl shr 29]
hole ich den passenden Scale aus dem Array.
Zitat:
und warum das schneller ist
Weil der Zugriff auf ein Array, zudem eines, dessen Felder 8 Bytes lang (double=64 Bit) sind, deutlich schneller ist, als den Scale in einer Case-Struktur zu ermitteln.
Zitat:
Bei Deiner Messfunktion kommt bei mir 32 zu 20 raus und nicht 88 zu 53 wie bei Dir
Bei mir werkelt eine Intel P4 CPU.
AMD-CPUs schaffen wohl mehr in einem CPU-Takt, arbeiten aber (glaube ich, weiß ich aber nicht) mit niedrigeren Taktraten, als Intel-CPUs.
Zitat:
Hat das was mit der CPU Geschwindigkeit zu tun
Nein, sondern mit der unterschiedlichen Prozessor-Architektur.
Vorausgesetzt du benutzt gleiche Prozessor-Architekturen, sollten die benötigten CPU-Ticks auch bei unterschiedlichen CPU-Taktfrequenzen übereinstimmen. (meine Meinung....).
Zitat:
Ist Dein rdtsc gleichbedeutend mit : queryperformancecounter ? Damit messe ich immer.
Nein!
QueryPerformanceCounter tickt mit (bei mir) knapp 3.6 MHz.
RDTSC tickt mit dem CPU-Takt (bei mir) knapp 2.7 GHz, also um den Faktor 750 schneller. Bei AMD liegt dieser Faktor vermutlich niedriger.
Um sehr kleine Performance-Unterschiede zu messen, ist (meine Meinung) RDTSC besser geeignet.