(math)=
<style> .green {color:green} </style>
.. role:: green
:hidden: true log
The highest priority is to be as accurate as possible, according to the C and IEEE 754 standards. By default, we will aim to be correctly rounded for all rounding modes. The current rounding mode of the floating point environment is used to perform computations and produce the final results.
Our next requirement is that the outputs are consistent across all platforms. Notice that the consistency requirement will be satisfied automatically if the implementation is correctly rounded.
Our last requirement for the implementations is to have good and predicable performance:
libc implementations.For other use cases that have strict requirements on the code size, memory footprint, or latency, such as embedded systems, we will aim to be as accurate as possible within the memory or latency budgets, and consistent across all platforms.
To check math functions enabled for Linux:
To check math functions enabled for Windows:
To check math functions enabled for macOS:
To check math functions enabled for GPU:
To check math functions enabled for embedded system:
| <Func> | <Func_f> (float) | <Func> (double) | <Func_l> (long double) | <Func_f16> (float16) | <Func_f128> (float128) | <Func_bf16> (bfloat16) | C23 Definition Section | C23 Error Handling Section |
|---|---|---|---|---|---|---|---|---|
| ceil | {{ check }} | {{ check }} | {{ check }} | {{ check }} | {{ check }} | {{ check }} | 7.12.9.1 | F.10.6.1 |
| canonicalize | {{ check }} | {{ check }} | {{ check }} | {{ check }} | {{ check }} | {{ check }} | 7.12.11.7 | F.10.8.7 |
| copysign | {{ check }} | {{ check }} | {{ check }} | {{ check }} | {{ check }} | {{ check }} | 7.12.11.1 | F.10.8.1 |
| dadd | N/A | N/A | {{ check }} | N/A | {{ check }}* | N/A | 7.12.14.1 | F.10.11 |
| ddiv | N/A | N/A | {{ check }} | N/A | {{ check }}* | N/A | 7.12.14.4 | F.10.11 |
| dfma | N/A | N/A | {{ check }} | N/A | {{ check }}* | N/A | 7.12.14.5 | F.10.11 |
| dmul | N/A | N/A | {{ check }} | N/A | {{ check }}* | N/A | 7.12.14.3 | F.10.11 |
| dsub | N/A | N/A | {{ check }} | N/A | {{ check }}* | N/A | 7.12.14.2 | F.10.11 |
| f16add | {{ check }}* | {{ check }}* | {{ check }}* | N/A | {{ check }} | N/A | 7.12.14.1 | F.10.11 |
| f16div | {{ check }}* | {{ check }}* | {{ check }}* | N/A | {{ check }} | N/A | 7.12.14.4 | F.10.11 |
| f16fma | {{ check }}* | {{ check }}* | {{ check }}* | N/A | {{ check }} | N/A | 7.12.14.5 | F.10.11 |
| f16mul | {{ check }}* | {{ check }}* | {{ check }}* | N/A | {{ check }} | N/A | 7.12.14.3 | F.10.11 |
| f16sub | {{ check }}* | {{ check }}* | {{ check }}* | N/A | {{ check }} | N/A | 7.12.14.2 | F.10.11 |
| bf16add | {{ check }}* | {{ check }}* | {{ check }}* | N/A | {{ check }} | N/A | 7.12.14.1 | F.10.11 |
| bf16div | {{ check }}* | {{ check }}* | {{ check }}* | N/A | {{ check }} | N/A | 7.12.14.4 | F.10.11 |
| bf16fma | {{ check }}* | {{ check }}* | {{ check }}* | N/A | {{ check }} | N/A | 7.12.14.5 | F.10.11 |
| bf16mul | {{ check }}* | {{ check }}* | {{ check }}* | N/A | {{ check }} | N/A | 7.12.14.3 | F.10.11 |
| bf16sub | {{ check }}* | {{ check }}* | {{ check }}* | N/A | {{ check }} | N/A | 7.12.14.2 | F.10.11 |
| fabs | {{ check }} | {{ check }} | {{ check }} | {{ check }} | {{ check }} | {{ check }} | 7.12.7.3 | F.10.4.3 |
| fadd | N/A | {{ check }} | {{ check }} | N/A | {{ check }} | N/A | 7.12.14.1 | F.10.11 |
| fdim | {{ check }} | {{ check }} | {{ check }} | {{ check }} | {{ check }} | {{ check }} | 7.12.12.1 | F.10.9.1 |
| fdiv | N/A | {{ check }} | {{ check }} | N/A | {{ check }}* | N/A | 7.12.14.4 | F.10.11 |
| ffma | N/A | {{ check }} | {{ check }} | N/A | {{ check }}* | N/A | 7.12.14.5 | F.10.11 |
| floor | {{ check }} | {{ check }} | {{ check }} | {{ check }} | {{ check }} | {{ check }} | 7.12.9.2 | F.10.6.2 |
| fmax | {{ check }} | {{ check }} | {{ check }} | {{ check }} | {{ check }} | {{ check }} | 7.12.12.2 | F.10.9.2 |
| fmaximum | {{ check }} | {{ check }} | {{ check }} | {{ check }} | {{ check }} | {{ check }} | 7.12.12.4 | F.10.9.4 |
| fmaximum_mag | {{ check }} | {{ check }} | {{ check }} | {{ check }} | {{ check }} | {{ check }} | 7.12.12.6 | F.10.9.4 |
| fmaximum_mag_num | {{ check }} | {{ check }} | {{ check }} | {{ check }} | {{ check }} | {{ check }} | 7.12.12.10 | F.10.9.5 |
| fmaximum_num | {{ check }} | {{ check }} | {{ check }} | {{ check }} | {{ check }} | {{ check }} | 7.12.12.8 | F.10.9.5 |
| fmin | {{ check }} | {{ check }} | {{ check }} | {{ check }} | {{ check }} | {{ check }} | 7.12.12.3 | F.10.9.3 |
| fminimum | {{ check }} | {{ check }} | {{ check }} | {{ check }} | {{ check }} | {{ check }} | 7.12.12.5 | F.10.9.4 |
| fminimum_mag | {{ check }} | {{ check }} | {{ check }} | {{ check }} | {{ check }} | {{ check }} | 7.12.12.7 | F.10.9.4 |
| fminimum_mag_num | {{ check }} | {{ check }} | {{ check }} | {{ check }} | {{ check }} | {{ check }} | 7.12.12.11 | F.10.9.5 |
| fminimum_num | {{ check }} | {{ check }} | {{ check }} | {{ check }} | {{ check }} | {{ check }} | 7.12.12.9 | F.10.9.5 |
| fmod | {{ check }} | {{ check }} | {{ check }} | {{ check }} | {{ check }} | {{ check }} | 7.12.10.1 | F.10.7.1 |
| fmul | N/A | {{ check }} | {{ check }} | N/A | {{ check }}* | N/A | 7.12.14.3 | F.10.11 |
| frexp | {{ check }} | {{ check }} | {{ check }} | {{ check }} | {{ check }} | {{ check }} | 7.12.6.7 | F.10.3.7 |
| fromfp | {{ check }} | {{ check }} | {{ check }} | {{ check }} | {{ check }} | {{ check }} | 7.12.9.10 | F.10.6.10 |
| fromfpx | {{ check }} | {{ check }} | {{ check }} | {{ check }} | {{ check }} | {{ check }} | 7.12.9.11 | F.10.6.11 |
| fsub | N/A | {{ check }} | {{ check }} | N/A | {{ check }}* | N/A | 7.12.14.2 | F.10.11 |
| getpayload | {{ check }} | {{ check }} | {{ check }} | {{ check }} | {{ check }} | {{ check }} | F.10.13.1 | N/A |
| ilogb | {{ check }} | {{ check }} | {{ check }} | {{ check }} | {{ check }} | {{ check }} | 7.12.6.8 | F.10.3.8 |
| iscanonical | {{ check }} | {{ check }} | {{ check }} | {{ check }} | {{ check }} | {{ check }} | 7.12.3.2 | N/A |
| issignaling | {{ check }} | {{ check }} | {{ check }} | {{ check }} | {{ check }} | {{ check }} | 7.12.3.8 | N/A |
| ldexp | {{ check }} | {{ check }} | {{ check }} | {{ check }} | {{ check }} | {{ check }} | 7.12.6.9 | F.10.3.9 |
| llogb | {{ check }} | {{ check }} | {{ check }} | {{ check }} | {{ check }} | {{ check }} | 7.12.6.10 | F.10.3.10 |
| llrint | {{ check }} | {{ check }} | {{ check }} | {{ check }} | {{ check }} | {{ check }} | 7.12.9.5 | F.10.6.5 |
| llround | {{ check }} | {{ check }} | {{ check }} | {{ check }} | {{ check }} | {{ check }} | 7.12.9.7 | F.10.6.7 |
| logb | {{ check }} | {{ check }} | {{ check }} | {{ check }} | {{ check }} | {{ check }} | 7.12.6.17 | F.10.3.17 |
| lrint | {{ check }} | {{ check }} | {{ check }} | {{ check }} | {{ check }} | {{ check }} | 7.12.9.5 | F.10.6.5 |
| lround | {{ check }} | {{ check }} | {{ check }} | {{ check }} | {{ check }} | {{ check }} | 7.12.9.7 | F.10.6.7 |
| modf | {{ check }} | {{ check }} | {{ check }} | {{ check }} | {{ check }} | {{ check }} | 7.12.6.18 | F.10.3.18 |
| nan | {{ check }} | {{ check }} | {{ check }} | {{ check }} | {{ check }} | {{ check }} | 7.12.11.2 | F.10.8.2 |
| nearbyint | {{ check }} | {{ check }} | {{ check }} | {{ check }} | {{ check }} | {{ check }} | 7.12.9.3 | F.10.6.3 |
| nextafter | {{ check }} | {{ check }} | {{ check }} | {{ check }} | {{ check }} | {{ check }} | 7.12.11.3 | F.10.8.3 |
| nextdown | {{ check }} | {{ check }} | {{ check }} | {{ check }} | {{ check }} | {{ check }} | 7.12.11.6 | F.10.8.6 |
| nexttoward | {{ check }} | {{ check }} | {{ check }} | {{ check }} | N/A | {{ check }} | 7.12.11.4 | F.10.8.4 |
| nextup | {{ check }} | {{ check }} | {{ check }} | {{ check }} | {{ check }} | {{ check }} | 7.12.11.5 | F.10.8.5 |
| remainder | {{ check }} | {{ check }} | {{ check }} | {{ check }} | {{ check }} | {{ check }} | 7.12.10.2 | F.10.7.2 |
| remquo | {{ check }} | {{ check }} | {{ check }} | {{ check }} | {{ check }} | {{ check }} | 7.12.10.3 | F.10.7.3 |
| rint | {{ check }} | {{ check }} | {{ check }} | {{ check }} | {{ check }} | {{ check }} | 7.12.9.4 | F.10.6.4 |
| round | {{ check }} | {{ check }} | {{ check }} | {{ check }} | {{ check }} | {{ check }} | 7.12.9.6 | F.10.6.6 |
| roundeven | {{ check }} | {{ check }} | {{ check }} | {{ check }} | {{ check }} | {{ check }} | 7.12.9.8 | F.10.6.8 |
| scalbln | {{ check }} | {{ check }} | {{ check }} | {{ check }} | {{ check }} | {{ check }} | 7.12.6.19 | F.10.3.19 |
| scalbn | {{ check }} | {{ check }} | {{ check }} | {{ check }} | {{ check }} | {{ check }} | 7.12.6.19 | F.10.3.19 |
| setpayload | {{ check }} | {{ check }} | {{ check }} | {{ check }} | {{ check }} | {{ check }} | F.10.13.2 | N/A |
| setpayloadsig | {{ check }} | {{ check }} | {{ check }} | {{ check }} | {{ check }} | {{ check }} | F.10.13.3 | N/A |
| totalorder | {{ check }} | {{ check }} | {{ check }} | {{ check }} | {{ check }} | {{ check }} | F.10.12.1 | N/A |
| totalordermag | {{ check }} | {{ check }} | {{ check }} | {{ check }} | {{ check }} | {{ check }} | F.10.12.2 | N/A |
| trunc | {{ check }} | {{ check }} | {{ check }} | {{ check }} | {{ check }} | {{ check }} | 7.12.9.9 | F.10.6.9 |
| ufromfp | {{ check }} | {{ check }} | {{ check }} | {{ check }} | {{ check }} | {{ check }} | 7.12.9.10 | F.10.6.10 |
| ufromfpx | {{ check }} | {{ check }} | {{ check }} | {{ check }} | {{ check }} | {{ check }} | 7.12.9.11 | F.10.6.11 |
| <Func> | <Func_f> (float) | <Func> (double) | <Func_l> (long double) | <Func_f16> (float16) | <Func_f128> (float128) | <Func_bf16> (bfloat16) | C23 Definition Section | C23 Error Handling Section |
|---|---|---|---|---|---|---|---|---|
| acos | {{ check }} | {{ check }} | {{ check }} | {{ check }} | 7.12.4.1 | F.10.1.1 | ||
| acosh | {{ check }} | {{ check }} | 7.12.5.1 | F.10.2.1 | ||||
| acospi | {{ check }} | 7.12.4.8 | F.10.1.8 | |||||
| asin | {{ check }} | {{ check }} | {{ check }} | {{ check }} | 7.12.4.2 | F.10.1.2 | ||
| asinh | {{ check }} | {{ check }} | 7.12.5.2 | F.10.2.2 | ||||
| asinpi | {{ check }} | {{ check }} | {{ check }} | 7.12.4.9 | F.10.1.9 | |||
| atan | {{ check }} | 1 ULP | {{ check }} | {{ check }} | 7.12.4.3 | F.10.1.3 | ||
| atan2 | {{ check }} | 1 ULP | {{ check }} | 1 ULP | 7.12.4.4 | F.10.1.4 | ||
| atan2pi | 7.12.4.11 | F.10.1.11 | ||||||
| atanh | {{ check }} | {{ check }} | 7.12.5.3 | F.10.2.3 | ||||
| atanpi | {{ check }} | 7.12.4.10 | F.10.1.10 | |||||
| cbrt | {{ check }} | {{ check }} | {{ check }} | {{ check }} | 7.12.7.1 | F.10.4.1 | ||
| compoundn | 7.12.7.2 | F.10.4.2 | ||||||
| cos | {{ check }} | {{ check }} | {{ check }} | 7.12.4.5 | F.10.1.5 | |||
| cosh | {{ check }} | {{ check }} | 7.12.5.4 | F.10.2.4 | ||||
| cospi | {{ check }} | {{ check }} | 7.12.4.12 | F.10.1.12 | ||||
| dsqrt | N/A | N/A | {{ check }} | N/A | {{ check }}* | 7.12.14.6 | F.10.11 | |
| erf | {{ check }} | 7.12.8.1 | F.10.5.1 | |||||
| erfc | 7.12.8.2 | F.10.5.2 | ||||||
| exp | {{ check }} | {{ check }} | {{ check }} | {{ check }} | 7.12.6.1 | F.10.3.1 | ||
| exp10 | {{ check }} | {{ check }} | {{ check }} | 7.12.6.2 | F.10.3.2 | |||
| exp10m1 | {{ check }} | {{ check }} | 7.12.6.3 | F.10.3.3 | ||||
| exp2 | {{ check }} | {{ check }} | {{ check }} | {{ check }} | 7.12.6.4 | F.10.3.4 | ||
| exp2m1 | {{ check }} | {{ check }} | 7.12.6.5 | F.10.3.5 | ||||
| expm1 | {{ check }} | {{ check }} | {{ check }} | 7.12.6.6 | F.10.3.6 | |||
| fma | {{ check }} | {{ check }} | {{ check }} | {{ check }} | 7.12.13.1 | F.10.10.1 | ||
| f16sqrt | {{ check }}* | {{ check }}* | {{ check }}* | N/A | {{ check }} | 7.12.14.6 | F.10.11 | |
| fsqrt | N/A | {{ check }} | {{ check }} | N/A | {{ check }}* | 7.12.14.6 | F.10.11 | |
| hypot | {{ check }} | {{ check }} | {{ check }} | {{ check }} | 7.12.7.4 | F.10.4.4 | ||
| lgamma | {{ check }} | 7.12.8.3 | F.10.5.3 | |||||
| log | {{ check }} | {{ check }} | {{ check }} | {{ check }} ? | 7.12.6.11 | F.10.3.11 | ||
| log10 | {{ check }} | {{ check }} | {{ check }} | 7.12.6.12 | F.10.3.12 | |||
| log10p1 | {{ check }} | 7.12.6.13 | F.10.3.13 | |||||
| log1p | {{ check }} | {{ check }} | 7.12.6.14 | F.10.3.14 | ||||
| log2 | {{ check }} | {{ check }} | {{ check }} | 7.12.6.15 | F.10.3.15 | |||
| log2p1 | {{ check }} | 7.12.6.16 | F.10.3.16 | |||||
| logp1 | 7.12.6.14 | F.10.3.14 | ||||||
| pow | {{ check }} | {{ check }} | 7.12.7.5 | F.10.4.5 | ||||
| powi* | ||||||||
| pown | 7.12.7.6 | F.10.4.6 | ||||||
| powr | 7.12.7.7 | F.10.4.7 | ||||||
| rootn | 7.12.7.8 | F.10.4.8 | ||||||
| rsqrt | {{ check }} | {{ check }} | 7.12.7.9 | F.10.4.9 | ||||
| sin | {{ check }} | {{ check }} | {{ check }} | 7.12.4.6 | F.10.1.6 | |||
| sincos | {{ check }} | {{ check }} | ||||||
| sinh | {{ check }} | {{ check }} | 7.12.5.5 | F.10.2.5 | ||||
| sinpi | {{ check }} | {{ check }} | 7.12.4.13 | F.10.1.13 | ||||
| sqrt | {{ check }} | {{ check }} | {{ check }} | {{ check }} | {{ check }} | {{ check }} | 7.12.7.10 | F.10.4.10 |
| tan | {{ check }} | {{ check }} | {{ check }} | {{ check }} | 7.12.4.7 | F.10.1.7 | ||
| tanh | {{ check }} | {{ check }} | 7.12.5.6 | F.10.2.6 | ||||
| tanpi | {{ check }} | {{ check }} | 7.12.4.14 | F.10.1.14 | ||||
| tgamma | 7.12.8.4 | F.10.5.4 |
Legends:
log_bf16.% TODO(lntue): Add a new page to discuss about the algorithms used in the % implementations and include the link here.
LIBC_MATH_SKIP_ACCURATE_PASS, LIBC_MATH_INTERMEDIATE_COMP_IN_FLOAT, LIBC_MATH_SMALL_TABLES, LIBC_MATH_NO_ERRNO, and LIBC_MATH_NO_EXCEPT.+------------------------+-------------+---------------+-----------------------------------------------------------------------------------+ | Function | Test Method | ULP Tolerance | Max ULP Distance | | | | +--------------------+--------------------+--------------------+--------------------+ | | | | LLVM libc | LLVM libc | CUDA Math | HIP Math | | | | | (AMDGPU) | (CUDA) | (CUDA) | (AMDGPU) | +========================+=============+===============+====================+====================+====================+====================+ | acos | Randomized | 4 | 6 (FAILED) | 6 (FAILED) | 1 | 1 | +------------------------+-------------+---------------+--------------------+--------------------+--------------------+--------------------+ | acosf | Exhaustive | 4 | 1 | 1 | 1 | 1 | +------------------------+-------------+---------------+--------------------+--------------------+--------------------+--------------------+ | acosf16 | Exhaustive | 2 | 1 | 1 | | 1 | +------------------------+-------------+---------------+--------------------+--------------------+--------------------+--------------------+ | acoshf | Exhaustive | 4 | 1 | 1 | 2 | 1 | +------------------------+-------------+---------------+--------------------+--------------------+--------------------+--------------------+ | acoshf16 | Exhaustive | 2 | 0 | 0 | | 0 | +------------------------+-------------+---------------+--------------------+--------------------+--------------------+--------------------+ | acospif16 | Exhaustive | 2 | 0 | 0 | | | +------------------------+-------------+---------------+--------------------+--------------------+--------------------+--------------------+ | asin | Randomized | 4 | 6 (FAILED) | 6 (FAILED) | 2 | 1 | +------------------------+-------------+---------------+--------------------+--------------------+--------------------+--------------------+ | asinf | Exhaustive | 4 | 1 | 1 | 1 | 3 | +------------------------+-------------+---------------+--------------------+--------------------+--------------------+--------------------+ | asinf16 | Exhaustive | 2 | 0 | 0 | | 2 | +------------------------+-------------+---------------+--------------------+--------------------+--------------------+--------------------+ | asinhf | Exhaustive | 4 | 1 | 1 | 2 | 1 | +------------------------+-------------+---------------+--------------------+--------------------+--------------------+--------------------+ | asinhf16 | Exhaustive | 2 | 1 | 1 | | 1 | +------------------------+-------------+---------------+--------------------+--------------------+--------------------+--------------------+ | atanf | Exhaustive | 5 | 0 | 0 | 1 | 2 | +------------------------+-------------+---------------+--------------------+--------------------+--------------------+--------------------+ | atanf16 | Exhaustive | 2 | 1 | 1 | | 1 | +------------------------+-------------+---------------+--------------------+--------------------+--------------------+--------------------+ | atan2f | Randomized | 6 | 1 | 1 | 2 | 3 | +------------------------+-------------+---------------+--------------------+--------------------+--------------------+--------------------+ | atanhf | Exhaustive | 5 | 0 | 0 | 3 | 1 | +------------------------+-------------+---------------+--------------------+--------------------+--------------------+--------------------+ | atanhf16 | Exhaustive | 2 | 0 | 0 | | 1 | +------------------------+-------------+---------------+--------------------+--------------------+--------------------+--------------------+ | cbrt | Randomized | 2 | 1 | 1 | 1 | 1 | +------------------------+-------------+---------------+--------------------+--------------------+--------------------+--------------------+ | cbrtf | Exhaustive | 2 | 0 | 0 | 1 | 1 | +------------------------+-------------+---------------+--------------------+--------------------+--------------------+--------------------+ | cos | Randomized | 4 | 1 | 1 | 2 | 1 | +------------------------+-------------+---------------+--------------------+--------------------+--------------------+--------------------+ | cosf | Exhaustive | 4 | 1 | 1 | 2 | 2 | +------------------------+-------------+---------------+--------------------+--------------------+--------------------+--------------------+ | cosf16 | Exhaustive | 2 | 1 | 1 | | 1 | +------------------------+-------------+---------------+--------------------+--------------------+--------------------+--------------------+ | coshf | Exhaustive | 4 | 0 | 0 | 2 | 1 | +------------------------+-------------+---------------+--------------------+--------------------+--------------------+--------------------+ | coshf16 | Exhaustive | 2 | 1 | 0 | | 1 | +------------------------+-------------+---------------+--------------------+--------------------+--------------------+--------------------+ | cospif | Exhaustive | 4 | 0 | 0 | 1 | 1 | +------------------------+-------------+---------------+--------------------+--------------------+--------------------+--------------------+ | cospif16 | Exhaustive | 2 | 0 | 0 | | | +------------------------+-------------+---------------+--------------------+--------------------+--------------------+--------------------+ | erff | Exhaustive | 16 | 0 | 0 | 1 | 2 | +------------------------+-------------+---------------+--------------------+--------------------+--------------------+--------------------+ | exp | Randomized | 3 | 1 | 1 | 1 | 1 | +------------------------+-------------+---------------+--------------------+--------------------+--------------------+--------------------+ | expf | Exhaustive | 3 | 0 | 0 | 2 | 1 | +------------------------+-------------+---------------+--------------------+--------------------+--------------------+--------------------+ | expf16 | Exhaustive | 2 | 1 | 1 | | 1 | +------------------------+-------------+---------------+--------------------+--------------------+--------------------+--------------------+ | exp10 | Randomized | 3 | 1 | 1 | 1 | 1 | +------------------------+-------------+---------------+--------------------+--------------------+--------------------+--------------------+ | exp10f | Exhaustive | 3 | 0 | 0 | 2 | 1 | +------------------------+-------------+---------------+--------------------+--------------------+--------------------+--------------------+ | exp10f16 | Exhaustive | 2 | 1 | 1 | | 1 | +------------------------+-------------+---------------+--------------------+--------------------+--------------------+--------------------+ | exp2 | Randomized | 3 | 1 | 1 | 1 | 1 | +------------------------+-------------+---------------+--------------------+--------------------+--------------------+--------------------+ | exp2f | Exhaustive | 3 | 1 | 1 | 2 | 1 | +------------------------+-------------+---------------+--------------------+--------------------+--------------------+--------------------+ | exp2f16 | Exhaustive | 2 | 1 | 1 | | 0 | +------------------------+-------------+---------------+--------------------+--------------------+--------------------+--------------------+ | expm1 | Randomized | 3 | 0 | 0 | 1 | 2 | +------------------------+-------------+---------------+--------------------+--------------------+--------------------+--------------------+ | expm1f | Exhaustive | 3 | 1 | 1 | 1 | 1 | +------------------------+-------------+---------------+--------------------+--------------------+--------------------+--------------------+ | expm1f16 | Exhaustive | 2 | 1 | 1 | | 1 | +------------------------+-------------+---------------+--------------------+--------------------+--------------------+--------------------+ | hypot | Randomized | 4 | 0 | 0 | 2 | 1 | +------------------------+-------------+---------------+--------------------+--------------------+--------------------+--------------------+ | hypotf | Randomized | 4 | 0 | 0 | 1 | 2 | +------------------------+-------------+---------------+--------------------+--------------------+--------------------+--------------------+ | hypotf16 | Exhaustive | 2 | 0 | 0 | | | +------------------------+-------------+---------------+--------------------+--------------------+--------------------+--------------------+ | log | Randomized | 3 | 1 | 1 | 1 | 1 | +------------------------+-------------+---------------+--------------------+--------------------+--------------------+--------------------+ | logf | Exhaustive | 3 | 1 | 1 | 1 | 2 | +------------------------+-------------+---------------+--------------------+--------------------+--------------------+--------------------+ | logf16 | Exhaustive | 2 | 1 | 1 | | 1 | +------------------------+-------------+---------------+--------------------+--------------------+--------------------+--------------------+ | log10 | Randomized | 3 | 1 | 1 | 1 | 1 | +------------------------+-------------+---------------+--------------------+--------------------+--------------------+--------------------+ | log10f | Exhaustive | 3 | 1 | 1 | 2 | 2 | +------------------------+-------------+---------------+--------------------+--------------------+--------------------+--------------------+ | log10f16 | Exhaustive | 2 | 1 | 1 | | 1 | +------------------------+-------------+---------------+--------------------+--------------------+--------------------+--------------------+ | log1p | Randomized | 2 | 1 | 1 | 1 | 1 | +------------------------+-------------+---------------+--------------------+--------------------+--------------------+--------------------+ | log1pf | Exhaustive | 2 | 1 | 1 | 1 | 1 | +------------------------+-------------+---------------+--------------------+--------------------+--------------------+--------------------+ | log2 | Randomized | 3 | 1 | 1 | 1 | 1 | +------------------------+-------------+---------------+--------------------+--------------------+--------------------+--------------------+ | log2f | Exhaustive | 3 | 0 | 0 | 1 | 1 | +------------------------+-------------+---------------+--------------------+--------------------+--------------------+--------------------+ | log2f16 | Exhaustive | 2 | 1 | 1 | | 0 | +------------------------+-------------+---------------+--------------------+--------------------+--------------------+--------------------+ | powf (integer exp.) | Randomized | 16 | 0 | 0 | 2 | 1 | +------------------------+-------------+---------------+--------------------+--------------------+--------------------+--------------------+ | powf (real exp.) | Randomized | 16 | 0 | 0 | 2 | 1 | +------------------------+-------------+---------------+--------------------+--------------------+--------------------+--------------------+ | sin | Randomized | 4 | 1 | 1 | 1 | 1 | +------------------------+-------------+---------------+--------------------+--------------------+--------------------+--------------------+ | sinf | Exhaustive | 4 | 1 | 1 | 1 | 2 | +------------------------+-------------+---------------+--------------------+--------------------+--------------------+--------------------+ | sinf16 | Exhaustive | 2 | 1 | 1 | | 1 | +------------------------+-------------+---------------+--------------------+--------------------+--------------------+--------------------+ | sincos (cos part) | Randomized | 4 | 1 | 1 | 2 | 1 | +------------------------+-------------+---------------+--------------------+--------------------+--------------------+--------------------+ | sincos (sin part) | Randomized | 4 | 1 | 1 | 1 | 1 | +------------------------+-------------+---------------+--------------------+--------------------+--------------------+--------------------+ | sincosf (cos part) | Exhaustive | 4 | 1 | 1 | 2 | 2 | +------------------------+-------------+---------------+--------------------+--------------------+--------------------+--------------------+ | sincosf (sin part) | Exhaustive | 4 | 1 | 1 | 1 | 2 | +------------------------+-------------+---------------+--------------------+--------------------+--------------------+--------------------+ | sinhf | Exhaustive | 4 | 1 | 1 | 3 | 1 | +------------------------+-------------+---------------+--------------------+--------------------+--------------------+--------------------+ | sinhf16 | Exhaustive | 2 | 1 | 1 | | 1 | +------------------------+-------------+---------------+--------------------+--------------------+--------------------+--------------------+ | sinpif | Exhaustive | 4 | 0 | 0 | 1 | 1 | +------------------------+-------------+---------------+--------------------+--------------------+--------------------+--------------------+ | sinpif16 | Exhaustive | 2 | 0 | 0 | | | +------------------------+-------------+---------------+--------------------+--------------------+--------------------+--------------------+ | tan | Randomized | 5 | 2 | 2 | 2 | 1 | +------------------------+-------------+---------------+--------------------+--------------------+--------------------+--------------------+ | tanf | Exhaustive | 5 | 0 | 0 | 3 | 2 | +------------------------+-------------+---------------+--------------------+--------------------+--------------------+--------------------+ | tanf16 | Exhaustive | 2 | 1 | 1 | | 2 | +------------------------+-------------+---------------+--------------------+--------------------+--------------------+--------------------+ | tanhf | Exhaustive | 5 | 0 | 0 | 2 | 1 | +------------------------+-------------+---------------+--------------------+--------------------+--------------------+--------------------+ | tanhf16 | Exhaustive | 2 | 0 | 0 | | 1 | +------------------------+-------------+---------------+--------------------+--------------------+--------------------+--------------------+ | tanpif | Exhaustive | 6 | 0 | 0 | | | +------------------------+-------------+---------------+--------------------+--------------------+--------------------+--------------------+ | tanpif16 | Exhaustive | 2 | 1 | 1 | | | +------------------------+-------------+---------------+--------------------+--------------------+--------------------+--------------------+
Notes:
32 samples. This method is used for functions with larger input spaces, such as single-precision bivariate and double-precision functions.+--------------+-------------------------------+-------------------------------+-------------------------------------+----------------------------------------------------------------------+ | <Func> | Reciprocal throughput (clk) | Latency (clk) | Testing ranges | Testing configuration | | +-----------+-------------------+-----------+-------------------+ +-------------+-------------------------+--------------+---------------+ | | LLVM libc | Reference (glibc) | LLVM libc | Reference (glibc) | | CPU | OS | Compiler | Special flags | +==============+===========+===================+===========+===================+=====================================+=============+=========================+==============+===============+ | acosf | 24 | 29 | 62 | 77 | :math:`[-1, 1]` | Ryzen 1700 | Ubuntu 22.04 LTS x86_64 | Clang 14.0.0 | FMA | +--------------+-----------+-------------------+-----------+-------------------+-------------------------------------+-------------+-------------------------+--------------+---------------+ | acoshf | 18 | 26 | 73 | 74 | :math:`[1, 21]` | Ryzen 1700 | Ubuntu 22.04 LTS x86_64 | Clang 14.0.0 | FMA | +--------------+-----------+-------------------+-----------+-------------------+-------------------------------------+-------------+-------------------------+--------------+---------------+ | asinf | 23 | 27 | 62 | 62 | :math:`[-1, 1]` | Ryzen 1700 | Ubuntu 22.04 LTS x86_64 | Clang 14.0.0 | FMA | +--------------+-----------+-------------------+-----------+-------------------+-------------------------------------+-------------+-------------------------+--------------+---------------+ | asinhf | 21 | 39 | 77 | 91 | :math:`[-10, 10]` | Ryzen 1700 | Ubuntu 22.04 LTS x86_64 | Clang 14.0.0 | FMA | +--------------+-----------+-------------------+-----------+-------------------+-------------------------------------+-------------+-------------------------+--------------+---------------+ | atanf | 27 | 29 | 79 | 68 | :math:`[-10, 10]` | Ryzen 1700 | Ubuntu 22.04 LTS x86_64 | Clang 14.0.0 | FMA | +--------------+-----------+-------------------+-----------+-------------------+-------------------------------------+-------------+-------------------------+--------------+---------------+ | atanhf | 18 | 66 | 68 | 133 | :math:`[-1, 1]` | Ryzen 1700 | Ubuntu 22.04 LTS x86_64 | Clang 14.0.0 | FMA | +--------------+-----------+-------------------+-----------+-------------------+-------------------------------------+-------------+-------------------------+--------------+---------------+ | cosf | 13 | 32 | 53 | 59 | :math:`[0, 2\pi]` | Ryzen 1700 | Ubuntu 20.04 LTS x86_64 | Clang 12.0.0 | FMA | +--------------+-----------+-------------------+-----------+-------------------+-------------------------------------+-------------+-------------------------+--------------+---------------+ | coshf | 14 | 20 | 50 | 48 | :math:`[-10, 10]` | Ryzen 1700 | Ubuntu 22.04 LTS x86_64 | Clang 14.0.0 | FMA | +--------------+-----------+-------------------+-----------+-------------------+-------------------------------------+-------------+-------------------------+--------------+---------------+ | expf | 9 | 7 | 44 | 38 | :math:`[-10, 10]` | Ryzen 1700 | Ubuntu 20.04 LTS x86_64 | Clang 12.0.0 | FMA | +--------------+-----------+-------------------+-----------+-------------------+-------------------------------------+-------------+-------------------------+--------------+---------------+ | exp10f | 10 | 8 | 40 | 38 | :math:`[-10, 10]` | Ryzen 1700 | Ubuntu 22.04 LTS x86_64 | Clang 14.0.0 | FMA | +--------------+-----------+-------------------+-----------+-------------------+-------------------------------------+-------------+-------------------------+--------------+---------------+ | exp2f | 9 | 6 | 35 | 31 | :math:`[-10, 10]` | Ryzen 1700 | Ubuntu 22.04 LTS x86_64 | Clang 14.0.0 | FMA | +--------------+-----------+-------------------+-----------+-------------------+-------------------------------------+-------------+-------------------------+--------------+---------------+ | expm1f | 9 | 44 | 42 | 121 | :math:`[-10, 10]` | Ryzen 1700 | Ubuntu 20.04 LTS x86_64 | Clang 12.0.0 | FMA | +--------------+-----------+-------------------+-----------+-------------------+-------------------------------------+-------------+-------------------------+--------------+---------------+ | fmodf | 73 | 263 | - | - | [MIN_NORMAL, MAX_NORMAL] | i5 mobile | Ubuntu 20.04 LTS x86_64 | Clang 12.0.0 | | | +-----------+-------------------+-----------+-------------------+-------------------------------------+-------------+-------------------------+--------------+---------------+ | | 9 | 11 | - | - | [0, MAX_SUBNORMAL] | i5 mobile | Ubuntu 20.04 LTS x86_64 | Clang 12.0.0 | | +--------------+-----------+-------------------+-----------+-------------------+-------------------------------------+-------------+-------------------------+--------------+---------------+ | fmod | 595 | 3297 | - | - | [MIN_NORMAL, MAX_NORMAL] | i5 mobile | Ubuntu 20.04 LTS x86_64 | Clang 12.0.0 | | | +-----------+-------------------+-----------+-------------------+-------------------------------------+-------------+-------------------------+--------------+---------------+ | | 14 | 13 | - | - | [0, MAX_SUBNORMAL] | i5 mobile | Ubuntu 20.04 LTS x86_64 | Clang 12.0.0 | | +--------------+-----------+-------------------+-----------+-------------------+-------------------------------------+-------------+-------------------------+--------------+---------------+ | hypotf | 25 | 15 | 64 | 49 | :math:`[-10, 10] \times [-10, 10]` | Ryzen 1700 | Ubuntu 20.04 LTS x86_64 | Clang 12.0.0 | | +--------------+-----------+-------------------+-----------+-------------------+-------------------------------------+-------------+-------------------------+--------------+---------------+ | logf | 12 | 10 | 56 | 46 | :math:`[e^{-1}, e]` | Ryzen 1700 | Ubuntu 20.04 LTS x86_64 | Clang 12.0.0 | FMA | +--------------+-----------+-------------------+-----------+-------------------+-------------------------------------+-------------+-------------------------+--------------+---------------+ | log10f | 9 | 17 | 35 | 48 | :math:`[e^{-1}, e]` | Ryzen 5900X | Ubuntu 22.04 LTS x86_64 | Clang 15.0.6 | FMA | +--------------+-----------+-------------------+-----------+-------------------+-------------------------------------+-------------+-------------------------+--------------+---------------+ | log1pf | 16 | 33 | 61 | 97 | :math:`[e^{-0.5} - 1, e^{0.5} - 1]` | Ryzen 1700 | Ubuntu 20.04 LTS x86_64 | Clang 12.0.0 | FMA | +--------------+-----------+-------------------+-----------+-------------------+-------------------------------------+-------------+-------------------------+--------------+---------------+ | log2f | 13 | 10 | 57 | 46 | :math:`[e^{-1}, e]` | Ryzen 1700 | Ubuntu 20.04 LTS x86_64 | Clang 12.0.0 | FMA | +--------------+-----------+-------------------+-----------+-------------------+-------------------------------------+-------------+-------------------------+--------------+---------------+ | sinf | 12 | 25 | 51 | 57 | :math:`[-\pi, \pi]` | Ryzen 1700 | Ubuntu 20.04 LTS x86_64 | Clang 12.0.0 | FMA | +--------------+-----------+-------------------+-----------+-------------------+-------------------------------------+-------------+-------------------------+--------------+---------------+ | sincosf | 19 | 30 | 57 | 68 | :math:`[-\pi, \pi]` | Ryzen 1700 | Ubuntu 20.04 LTS x86_64 | Clang 12.0.0 | FMA | +--------------+-----------+-------------------+-----------+-------------------+-------------------------------------+-------------+-------------------------+--------------+---------------+ | sinhf | 13 | 63 | 48 | 137 | :math:`[-10, 10]` | Ryzen 1700 | Ubuntu 22.04 LTS x86_64 | Clang 14.0.0 | FMA | +--------------+-----------+-------------------+-----------+-------------------+-------------------------------------+-------------+-------------------------+--------------+---------------+ | tanf | 16 | 50 | 61 | 107 | :math:`[-\pi, \pi]` | Ryzen 1700 | Ubuntu 22.04 LTS x86_64 | Clang 14.0.0 | FMA | +--------------+-----------+-------------------+-----------+-------------------+-------------------------------------+-------------+-------------------------+--------------+---------------+ | tanhf | 13 | 55 | 57 | 123 | :math:`[-10, 10]` | Ryzen 1700 | Ubuntu 22.04 LTS x86_64 | Clang 14.0.0 | FMA | +--------------+-----------+-------------------+-----------+-------------------+-------------------------------------+-------------+-------------------------+--------------+---------------+
log../stdfix