Edocti
Fortgeschrittene technische Ausbildung für den modernen Softwareingenieur

Gleitkomma-Operationen: Hardware vs. Software

Dies ist (vielleicht unvollständig) eine Liste von Floating-Point-Routinen in GCC:

__udivsi3
_vfprintf_r
__eqdf2
__nedf2
__umoddi3
__udivdi3
__ltdf2
__eqdf2
__nedf2
__negdf2
__udivsi3
__eqdf2
__subdf3
__muldf3
__adddf3
__floatsidf
__muldf3
__adddf3
__fixdfsi
__ltdf2
__gtdf2
__divdf3
__muldf3
__divdf3
__ltdf2
__muldf3
__floatsidf
__muldf3
__adddf3
__subdf3
__gtdf2
__negdf2
__gtdf2
__muldf3
__gedf2
__divdf3
      

Abhängig vom g++/gcc-Flag (z. B. -msoft-float) verlinkt der Linker entweder auf die Hardware-FPU (x87 auf x86) oder auf Software-Bibliotheken, die die oben genannten Funktionen implementieren.

Der Unterschied zwischen HW und SW sollte im Wesentlichen die Geschwindigkeit sein – die Algorithmen sind identisch. Hier ist ein Beispiel für die Floating-Point-div-Operation (aus der Apple clang OSS-Implementierung).

In der Praxis besitzen manche FPUs Features wie „Rundung erst beim Schreiben in den Speicher“, was gegenüber SW-Implementierungen Vorteile bringen kann. Für hochpräzise FP-Berechnungen (z. B. im Finanzbereich) gibt es zudem Libraries, die Rundungsfehler weiter reduzieren – etwa Java’s BigDecimal oder GMP.

Paul Ianas