Im C-Laufzeitsystem gibt es zu jeder Funktion, die mit Gleitpunktzahlen arbeitet oder eine Gleitpunktzahl zurückliefert,
eine Implementierung der Funktion mit /390-Arithmetik,
eine Implementierung der Funktion mit IEEE-Arithmetik,
ein Makro-Define, das die Originalfunktion (/390-Funktion) auf die zugehörige IEEE-Funktion abbildet.
Prototyp einer IEEE-Funktion und zugehöriges Define sind in derselben Include-Datei abgelegt, in der auch die korrespondierende Originalfunktion deklariert ist. Dies hat den Vorteil, dass, außer ggf. <ieee_390.h> (siehe "Explizite Konvertierung von Gleitpunktzahlen"), für die Nutzung der IEEE-Gleitpunkt-Arithmetik keine zusätzlichen Include-Dateien benötigt werden.
Namen der IEEE-Funktionen
Die Namen der IEEE-Funktionen sind nach folgender Syntax aufgebaut:
__
originalfunktion_ieee()
Dabei ist für originalfunktion der Name der Originalfunktion einzusetzen.
Die IEEE-Variante von sin()
beispielsweise lautet __sin_ieee()
.
C-Bibliotheksfunktionen, zu denen es eine IEEE-Funktion gibt
Zu folgenden C-Bibliotheksfunktionen gibt es jeweils eine IEEE-Variante:
acos | asin | atan | atan2 | atof | ceil |
cos | cosh | difftime | difftime64 | ecvt | erf |
erfc | exp | expm1 | fabs | fcvt | floor |
floorf | floorl | fmod | fprintf | frexp | fscanf |
gamma | gcvt | hypot | j0 | j1 | jn |
ldexp | lgamma | llrintf | llrintf | llrintl | llround |
llroundf | llroundl | log | log10 | log1p | lrint |
lrintf | lrintl | lround | lroundf | lroundl | modf |
modff | modfl | pow | printf | rint | rintf |
rintl | round | roundf | roundl | scanf | sin |
sinh | snprintf | sprintf | sqrt | sscanf | strtod |
strtof | strtold | tan | tanh | vfprintf | vfscanf |
vprintf | vscanf | vsnprintf | vsprintf | vsscanf | y0 |
y1 | yn |
Für die folgenden Funktionen werden die IEEE-Prototypen nur im Sprachmodus C11 bzw. C++ 2017 generiert:
acosf | acosl | asinf | asinl | atanf | atanl |
atan2f | atan2l | atan2f | atan2l | copysign | copysignf |
copysignl | cosf | cosl | coshf | coshl | erff |
erfl | erfcf | erfcl | expf | expl | expm1f |
expm1l | exp2 | exp2f | exp2l | fabsf | fabsl |
fdim | fdimf | fdiml | fmax | fmaxf | fmaxl |
fmin | fminf | fminl | fmodf | fmodl | frexpf |
frexpl | hypotf | hypotl | hypotf | ldexpf | ldexpl |
lgammaf | lgammal | logf | logl | log10f | log10l |
log1pf | log1pl | log2 | log2f | log2l | nearbyint |
log2l | nearbyintl | powf | powl | scalbln | scalblnf |
scalblnl | scalbn | scalbnf | scalbnl | sinf | sinl |
sinhf | sinhl | sqrtf | sqrtl | tanf | tanl |
tanhf | tanhl | tgamma | tgammaf | tgammal | trunc |
truncf | truncl |