1a9aff440SNick Desaulniers.. _math: 2a9aff440SNick Desaulniers 3a9aff440SNick Desaulniers====== 4a9aff440SNick Desaulniersmath.h 5a9aff440SNick Desaulniers====== 6a9aff440SNick Desaulniers 7a9aff440SNick Desaulniers.. include:: ../../check.rst 8a9aff440SNick Desaulniers 9a9aff440SNick Desaulniers.. raw:: html 10a9aff440SNick Desaulniers 11a9aff440SNick Desaulniers <style> .green {color:green} </style> 12a9aff440SNick Desaulniers 13a9aff440SNick Desaulniers.. role:: green 14a9aff440SNick Desaulniers 15a9aff440SNick Desaulniers.. toctree:: 16a9aff440SNick Desaulniers :hidden: 17a9aff440SNick Desaulniers 18a9aff440SNick Desaulniers log.rst 19a9aff440SNick Desaulniers stdfix.rst 20a9aff440SNick Desaulniers 21a9aff440SNick Desaulniers 22a9aff440SNick Desaulniers.. contents:: Table of Contents 23a9aff440SNick Desaulniers :depth: 4 24a9aff440SNick Desaulniers :local: 25a9aff440SNick Desaulniers 26a9aff440SNick DesaulniersSource Locations 27a9aff440SNick Desaulniers================ 28a9aff440SNick Desaulniers 29a9aff440SNick Desaulniers- The main source is located at: `libc/src/math <https://github.com/llvm/llvm-project/tree/main/libc/src/math>`_. 30a9aff440SNick Desaulniers- The tests are located at: `libc/test/src/math <https://github.com/llvm/llvm-project/tree/main/libc/test/src/math>`_. 31a9aff440SNick Desaulniers- The floating point utilities are located at: `libc/src/__support/FPUtil <https://github.com/llvm/llvm-project/tree/main/libc/src/__support/FPUtil>`_. 32a9aff440SNick Desaulniers 33a9aff440SNick DesaulniersImplementation Requirements / Goals 34a9aff440SNick Desaulniers=================================== 35a9aff440SNick Desaulniers 36a9aff440SNick Desaulniers* The highest priority is to be as accurate as possible, according to the C and 37a9aff440SNick Desaulniers IEEE 754 standards. By default, we will aim to be correctly rounded for `all rounding modes <https://en.cppreference.com/w/c/numeric/fenv/FE_round>`_. 38a9aff440SNick Desaulniers The current rounding mode of the floating point environment is used to perform 39a9aff440SNick Desaulniers computations and produce the final results. 40a9aff440SNick Desaulniers 41a9aff440SNick Desaulniers - To test for correctness, we compare the outputs with other correctly rounded 42a9aff440SNick Desaulniers multiple-precision math libraries such as the `GNU MPFR library <https://www.mpfr.org/>`_ 43a9aff440SNick Desaulniers or the `CORE-MATH library <https://core-math.gitlabpages.inria.fr/>`_. 44a9aff440SNick Desaulniers 45a9aff440SNick Desaulniers* Our next requirement is that the outputs are consistent across all platforms. 46a9aff440SNick Desaulniers Notice that the consistency requirement will be satisfied automatically if the 47a9aff440SNick Desaulniers implementation is correctly rounded. 48a9aff440SNick Desaulniers 49a9aff440SNick Desaulniers* Our last requirement for the implementations is to have good and predicable 50a9aff440SNick Desaulniers performance: 51a9aff440SNick Desaulniers 52a9aff440SNick Desaulniers - The average performance should be comparable to other ``libc`` 53a9aff440SNick Desaulniers implementations. 54a9aff440SNick Desaulniers - The worst case performance should be within 10X-20X of the average. 55a9aff440SNick Desaulniers - Platform-specific implementations or instructions could be added whenever it 56a9aff440SNick Desaulniers makes sense and provides significant performance boost. 57a9aff440SNick Desaulniers 58a9aff440SNick Desaulniers* For other use cases that have strict requirements on the code size, memory 59a9aff440SNick Desaulniers footprint, or latency, such as embedded systems, we will aim to be as accurate 60a9aff440SNick Desaulniers as possible within the memory or latency budgets, and consistent across all 61a9aff440SNick Desaulniers platforms. 62a9aff440SNick Desaulniers 63a9aff440SNick Desaulniers 64a9aff440SNick DesaulniersAdd a new math function to LLVM libc 65a9aff440SNick Desaulniers==================================== 66a9aff440SNick Desaulniers 67a9aff440SNick Desaulniers* To add a new math function, follow the steps at: `libc/src/math/docs/add_math_function.md <https://github.com/llvm/llvm-project/tree/main/libc/src/math/docs/add_math_function.md>`_. 68a9aff440SNick Desaulniers 69a9aff440SNick DesaulniersImplementation Status 70a9aff440SNick Desaulniers===================== 71a9aff440SNick Desaulniers 72a9aff440SNick Desaulniers* To check math functions enabled for Linux: 73a9aff440SNick Desaulniers 74a9aff440SNick Desaulniers - `linux-x86_64 <https://github.com/llvm/llvm-project/tree/main/libc/config/linux/x86_64/entrypoints.txt>`_ 75a9aff440SNick Desaulniers 76a9aff440SNick Desaulniers - `linux-aarch64 <https://github.com/llvm/llvm-project/tree/main/libc/config/linux/aarch64/entrypoints.txt>`_ 77a9aff440SNick Desaulniers 78a9aff440SNick Desaulniers - `linux-aarch32 <https://github.com/llvm/llvm-project/tree/main/libc/config/linux/arm/entrypoints.txt>`_ 79a9aff440SNick Desaulniers 80a9aff440SNick Desaulniers - `linux-riscv and linux-riscv32 <https://github.com/llvm/llvm-project/tree/main/libc/config/linux/riscv/entrypoints.txt>`_ 81a9aff440SNick Desaulniers 82a9aff440SNick Desaulniers* To check math functions enabled for Windows: 83a9aff440SNick Desaulniers 84a9aff440SNick Desaulniers - `windows-x86_64 <https://github.com/llvm/llvm-project/tree/main/libc/config/windows/entrypoints.txt>`_ 85a9aff440SNick Desaulniers 86a9aff440SNick Desaulniers - windows-aarch64 - to be added 87a9aff440SNick Desaulniers 88a9aff440SNick Desaulniers* To check math functions enabled for macOS: 89a9aff440SNick Desaulniers 90a9aff440SNick Desaulniers - `darwin-x86_64 <https://github.com/llvm/llvm-project/tree/main/libc/config/darwin/x86_64/entrypoints.txt>`_ 91a9aff440SNick Desaulniers 92a9aff440SNick Desaulniers - `darwin-aarch64 <https://github.com/llvm/llvm-project/tree/main/libc/config/darwin/arm/entrypoints.txt>`_ 93a9aff440SNick Desaulniers 94a9aff440SNick Desaulniers* To check math functions enabled for GPU: 95a9aff440SNick Desaulniers 96a9aff440SNick Desaulniers - `gpu-entrypoints <https://github.com/llvm/llvm-project/tree/main/libc/config/gpu/entrypoints.txt>`_ 97a9aff440SNick Desaulniers 98a9aff440SNick Desaulniers* To check math functions enabled for embedded system: 99a9aff440SNick Desaulniers 100a9aff440SNick Desaulniers - `baremetal-aarch32 <https://github.com/llvm/llvm-project/tree/main/libc/config/baremetal/arm/entrypoints.txt>`_ 101a9aff440SNick Desaulniers 102a9aff440SNick Desaulniers - baremetal-riscv32 - to be added 103a9aff440SNick Desaulniers 104a9aff440SNick Desaulniers 105a9aff440SNick DesaulniersBasic Operations 106a9aff440SNick Desaulniers================ 107a9aff440SNick Desaulniers 108a9aff440SNick Desaulniers+------------------+------------------+-----------------+------------------------+----------------------+------------------------+------------------------+----------------------------+ 109a9aff440SNick Desaulniers| <Func> | <Func_f> (float) | <Func> (double) | <Func_l> (long double) | <Func_f16> (float16) | <Func_f128> (float128) | C23 Definition Section | C23 Error Handling Section | 110a9aff440SNick Desaulniers+==================+==================+=================+========================+======================+========================+========================+============================+ 111a9aff440SNick Desaulniers| ceil | |check| | |check| | |check| | |check| | |check| | 7.12.9.1 | F.10.6.1 | 112a9aff440SNick Desaulniers+------------------+------------------+-----------------+------------------------+----------------------+------------------------+------------------------+----------------------------+ 113a9aff440SNick Desaulniers| canonicalize | |check| | |check| | |check| | |check| | |check| | 7.12.11.7 | F.10.8.7 | 114a9aff440SNick Desaulniers+------------------+------------------+-----------------+------------------------+----------------------+------------------------+------------------------+----------------------------+ 115a9aff440SNick Desaulniers| copysign | |check| | |check| | |check| | |check| | |check| | 7.12.11.1 | F.10.8.1 | 116a9aff440SNick Desaulniers+------------------+------------------+-----------------+------------------------+----------------------+------------------------+------------------------+----------------------------+ 117a9aff440SNick Desaulniers| dadd | N/A | N/A | |check| | N/A | |check|\* | 7.12.14.1 | F.10.11 | 118a9aff440SNick Desaulniers+------------------+------------------+-----------------+------------------------+----------------------+------------------------+------------------------+----------------------------+ 119a9aff440SNick Desaulniers| ddiv | N/A | N/A | |check| | N/A | |check|\* | 7.12.14.4 | F.10.11 | 120a9aff440SNick Desaulniers+------------------+------------------+-----------------+------------------------+----------------------+------------------------+------------------------+----------------------------+ 121a9aff440SNick Desaulniers| dfma | N/A | N/A | |check| | N/A | |check|\* | 7.12.14.5 | F.10.11 | 122a9aff440SNick Desaulniers+------------------+------------------+-----------------+------------------------+----------------------+------------------------+------------------------+----------------------------+ 123a9aff440SNick Desaulniers| dmul | N/A | N/A | |check| | N/A | |check|\* | 7.12.14.3 | F.10.11 | 124a9aff440SNick Desaulniers+------------------+------------------+-----------------+------------------------+----------------------+------------------------+------------------------+----------------------------+ 125a9aff440SNick Desaulniers| dsub | N/A | N/A | |check| | N/A | |check|\* | 7.12.14.2 | F.10.11 | 126a9aff440SNick Desaulniers+------------------+------------------+-----------------+------------------------+----------------------+------------------------+------------------------+----------------------------+ 127a9aff440SNick Desaulniers| f16add | |check|\* | |check|\* | |check|\* | N/A | |check| | 7.12.14.1 | F.10.11 | 128a9aff440SNick Desaulniers+------------------+------------------+-----------------+------------------------+----------------------+------------------------+------------------------+----------------------------+ 129a9aff440SNick Desaulniers| f16div | |check|\* | |check|\* | |check|\* | N/A | |check| | 7.12.14.4 | F.10.11 | 130a9aff440SNick Desaulniers+------------------+------------------+-----------------+------------------------+----------------------+------------------------+------------------------+----------------------------+ 131a9aff440SNick Desaulniers| f16fma | |check|\* | |check|\* | |check|\* | N/A | |check| | 7.12.14.5 | F.10.11 | 132a9aff440SNick Desaulniers+------------------+------------------+-----------------+------------------------+----------------------+------------------------+------------------------+----------------------------+ 133a9aff440SNick Desaulniers| f16mul | |check|\* | |check|\* | |check|\* | N/A | |check| | 7.12.14.5 | F.10.11 | 134a9aff440SNick Desaulniers+------------------+------------------+-----------------+------------------------+----------------------+------------------------+------------------------+----------------------------+ 135a9aff440SNick Desaulniers| f16sub | |check|\* | |check|\* | |check|\* | N/A | |check| | 7.12.14.2 | F.10.11 | 136a9aff440SNick Desaulniers+------------------+------------------+-----------------+------------------------+----------------------+------------------------+------------------------+----------------------------+ 137a9aff440SNick Desaulniers| fabs | |check| | |check| | |check| | |check| | |check| | 7.12.7.3 | F.10.4.3 | 138a9aff440SNick Desaulniers+------------------+------------------+-----------------+------------------------+----------------------+------------------------+------------------------+----------------------------+ 139a9aff440SNick Desaulniers| fadd | N/A | |check| | |check| | N/A | |check| | 7.12.14.1 | F.10.11 | 140a9aff440SNick Desaulniers+------------------+------------------+-----------------+------------------------+----------------------+------------------------+------------------------+----------------------------+ 141a9aff440SNick Desaulniers| fdim | |check| | |check| | |check| | |check| | |check| | 7.12.12.1 | F.10.9.1 | 142a9aff440SNick Desaulniers+------------------+------------------+-----------------+------------------------+----------------------+------------------------+------------------------+----------------------------+ 143a9aff440SNick Desaulniers| fdiv | N/A | |check| | |check| | N/A | |check|\* | 7.12.14.4 | F.10.11 | 144a9aff440SNick Desaulniers+------------------+------------------+-----------------+------------------------+----------------------+------------------------+------------------------+----------------------------+ 145a9aff440SNick Desaulniers| ffma | N/A | |check| | |check| | N/A | |check|\* | 7.12.14.5 | F.10.11 | 146a9aff440SNick Desaulniers+------------------+------------------+-----------------+------------------------+----------------------+------------------------+------------------------+----------------------------+ 147a9aff440SNick Desaulniers| floor | |check| | |check| | |check| | |check| | |check| | 7.12.9.2 | F.10.6.2 | 148a9aff440SNick Desaulniers+------------------+------------------+-----------------+------------------------+----------------------+------------------------+------------------------+----------------------------+ 149a9aff440SNick Desaulniers| fmax | |check| | |check| | |check| | |check| | |check| | 7.12.12.2 | F.10.9.2 | 150a9aff440SNick Desaulniers+------------------+------------------+-----------------+------------------------+----------------------+------------------------+------------------------+----------------------------+ 151a9aff440SNick Desaulniers| fmaximum | |check| | |check| | |check| | |check| | |check| | 7.12.12.4 | F.10.9.4 | 152a9aff440SNick Desaulniers+------------------+------------------+-----------------+------------------------+----------------------+------------------------+------------------------+----------------------------+ 153a9aff440SNick Desaulniers| fmaximum_mag | |check| | |check| | |check| | |check| | |check| | 7.12.12.6 | F.10.9.4 | 154a9aff440SNick Desaulniers+------------------+------------------+-----------------+------------------------+----------------------+------------------------+------------------------+----------------------------+ 155a9aff440SNick Desaulniers| fmaximum_mag_num | |check| | |check| | |check| | |check| | |check| | 7.12.12.10 | F.10.9.5 | 156a9aff440SNick Desaulniers+------------------+------------------+-----------------+------------------------+----------------------+------------------------+------------------------+----------------------------+ 157a9aff440SNick Desaulniers| fmaximum_num | |check| | |check| | |check| | |check| | |check| | 7.12.12.8 | F.10.9.5 | 158a9aff440SNick Desaulniers+------------------+------------------+-----------------+------------------------+----------------------+------------------------+------------------------+----------------------------+ 159a9aff440SNick Desaulniers| fmin | |check| | |check| | |check| | |check| | |check| | 7.12.12.3 | F.10.9.3 | 160a9aff440SNick Desaulniers+------------------+------------------+-----------------+------------------------+----------------------+------------------------+------------------------+----------------------------+ 161a9aff440SNick Desaulniers| fminimum | |check| | |check| | |check| | |check| | |check| | 7.12.12.5 | F.10.9.4 | 162a9aff440SNick Desaulniers+------------------+------------------+-----------------+------------------------+----------------------+------------------------+------------------------+----------------------------+ 163a9aff440SNick Desaulniers| fminimum_mag | |check| | |check| | |check| | |check| | |check| | 7.12.12.7 | F.10.9.4 | 164a9aff440SNick Desaulniers+------------------+------------------+-----------------+------------------------+----------------------+------------------------+------------------------+----------------------------+ 165a9aff440SNick Desaulniers| fminimum_mag_num | |check| | |check| | |check| | |check| | |check| | 7.12.12.11 | F.10.9.5 | 166a9aff440SNick Desaulniers+------------------+------------------+-----------------+------------------------+----------------------+------------------------+------------------------+----------------------------+ 167a9aff440SNick Desaulniers| fminimum_num | |check| | |check| | |check| | |check| | |check| | 7.12.12.9 | F.10.9.5 | 168a9aff440SNick Desaulniers+------------------+------------------+-----------------+------------------------+----------------------+------------------------+------------------------+----------------------------+ 169a9aff440SNick Desaulniers| fmod | |check| | |check| | |check| | |check| | |check| | 7.12.10.1 | F.10.7.1 | 170a9aff440SNick Desaulniers+------------------+------------------+-----------------+------------------------+----------------------+------------------------+------------------------+----------------------------+ 171a9aff440SNick Desaulniers| fmul | N/A | |check| | |check| | N/A | |check|\* | 7.12.14.3 | F.10.11 | 172a9aff440SNick Desaulniers+------------------+------------------+-----------------+------------------------+----------------------+------------------------+------------------------+----------------------------+ 173a9aff440SNick Desaulniers| frexp | |check| | |check| | |check| | |check| | |check| | 7.12.6.7 | F.10.3.7 | 174a9aff440SNick Desaulniers+------------------+------------------+-----------------+------------------------+----------------------+------------------------+------------------------+----------------------------+ 175a9aff440SNick Desaulniers| fromfp | |check| | |check| | |check| | |check| | |check| | 7.12.9.10 | F.10.6.10 | 176a9aff440SNick Desaulniers+------------------+------------------+-----------------+------------------------+----------------------+------------------------+------------------------+----------------------------+ 177a9aff440SNick Desaulniers| fromfpx | |check| | |check| | |check| | |check| | |check| | 7.12.9.11 | F.10.6.11 | 178a9aff440SNick Desaulniers+------------------+------------------+-----------------+------------------------+----------------------+------------------------+------------------------+----------------------------+ 179a9aff440SNick Desaulniers| fsub | N/A | |check| | |check| | N/A | |check|\* | 7.12.14.2 | F.10.11 | 180a9aff440SNick Desaulniers+------------------+------------------+-----------------+------------------------+----------------------+------------------------+------------------------+----------------------------+ 181a9aff440SNick Desaulniers| getpayload | |check| | |check| | |check| | |check| | |check| | F.10.13.1 | N/A | 182a9aff440SNick Desaulniers+------------------+------------------+-----------------+------------------------+----------------------+------------------------+------------------------+----------------------------+ 183a9aff440SNick Desaulniers| ilogb | |check| | |check| | |check| | |check| | |check| | 7.12.6.8 | F.10.3.8 | 184a9aff440SNick Desaulniers+------------------+------------------+-----------------+------------------------+----------------------+------------------------+------------------------+----------------------------+ 185a9aff440SNick Desaulniers| iscanonical | |check| | |check| | |check| | |check| | |check| | 7.12.3.2 | N/A | 186a9aff440SNick Desaulniers+------------------+------------------+-----------------+------------------------+----------------------+------------------------+------------------------+----------------------------+ 187a9aff440SNick Desaulniers| issignaling | |check| | |check| | |check| | |check| | |check| | 7.12.3.8 | N/A | 188a9aff440SNick Desaulniers+------------------+------------------+-----------------+------------------------+----------------------+------------------------+------------------------+----------------------------+ 189a9aff440SNick Desaulniers| ldexp | |check| | |check| | |check| | |check| | |check| | 7.12.6.9 | F.10.3.9 | 190a9aff440SNick Desaulniers+------------------+------------------+-----------------+------------------------+----------------------+------------------------+------------------------+----------------------------+ 191a9aff440SNick Desaulniers| llogb | |check| | |check| | |check| | |check| | |check| | 7.12.6.10 | F.10.3.10 | 192a9aff440SNick Desaulniers+------------------+------------------+-----------------+------------------------+----------------------+------------------------+------------------------+----------------------------+ 193a9aff440SNick Desaulniers| llrint | |check| | |check| | |check| | |check| | |check| | 7.12.9.5 | F.10.6.5 | 194a9aff440SNick Desaulniers+------------------+------------------+-----------------+------------------------+----------------------+------------------------+------------------------+----------------------------+ 195a9aff440SNick Desaulniers| llround | |check| | |check| | |check| | |check| | |check| | 7.12.9.7 | F.10.6.7 | 196a9aff440SNick Desaulniers+------------------+------------------+-----------------+------------------------+----------------------+------------------------+------------------------+----------------------------+ 197a9aff440SNick Desaulniers| logb | |check| | |check| | |check| | |check| | |check| | 7.12.6.17 | F.10.3.17 | 198a9aff440SNick Desaulniers+------------------+------------------+-----------------+------------------------+----------------------+------------------------+------------------------+----------------------------+ 199a9aff440SNick Desaulniers| lrint | |check| | |check| | |check| | |check| | |check| | 7.12.9.5 | F.10.6.5 | 200a9aff440SNick Desaulniers+------------------+------------------+-----------------+------------------------+----------------------+------------------------+------------------------+----------------------------+ 201a9aff440SNick Desaulniers| lround | |check| | |check| | |check| | |check| | |check| | 7.12.9.7 | F.10.6.7 | 202a9aff440SNick Desaulniers+------------------+------------------+-----------------+------------------------+----------------------+------------------------+------------------------+----------------------------+ 203a9aff440SNick Desaulniers| modf | |check| | |check| | |check| | |check| | |check| | 7.12.6.18 | F.10.3.18 | 204a9aff440SNick Desaulniers+------------------+------------------+-----------------+------------------------+----------------------+------------------------+------------------------+----------------------------+ 205a9aff440SNick Desaulniers| nan | |check| | |check| | |check| | |check| | |check| | 7.12.11.2 | F.10.8.2 | 206a9aff440SNick Desaulniers+------------------+------------------+-----------------+------------------------+----------------------+------------------------+------------------------+----------------------------+ 207a9aff440SNick Desaulniers| nearbyint | |check| | |check| | |check| | |check| | |check| | 7.12.9.3 | F.10.6.3 | 208a9aff440SNick Desaulniers+------------------+------------------+-----------------+------------------------+----------------------+------------------------+------------------------+----------------------------+ 209a9aff440SNick Desaulniers| nextafter | |check| | |check| | |check| | |check| | |check| | 7.12.11.3 | F.10.8.3 | 210a9aff440SNick Desaulniers+------------------+------------------+-----------------+------------------------+----------------------+------------------------+------------------------+----------------------------+ 211a9aff440SNick Desaulniers| nextdown | |check| | |check| | |check| | |check| | |check| | 7.12.11.6 | F.10.8.6 | 212a9aff440SNick Desaulniers+------------------+------------------+-----------------+------------------------+----------------------+------------------------+------------------------+----------------------------+ 213a9aff440SNick Desaulniers| nexttoward | |check| | |check| | |check| | |check| | N/A | 7.12.11.4 | F.10.8.4 | 214a9aff440SNick Desaulniers+------------------+------------------+-----------------+------------------------+----------------------+------------------------+------------------------+----------------------------+ 215a9aff440SNick Desaulniers| nextup | |check| | |check| | |check| | |check| | |check| | 7.12.11.5 | F.10.8.5 | 216a9aff440SNick Desaulniers+------------------+------------------+-----------------+------------------------+----------------------+------------------------+------------------------+----------------------------+ 217a9aff440SNick Desaulniers| remainder | |check| | |check| | |check| | |check| | |check| | 7.12.10.2 | F.10.7.2 | 218a9aff440SNick Desaulniers+------------------+------------------+-----------------+------------------------+----------------------+------------------------+------------------------+----------------------------+ 219a9aff440SNick Desaulniers| remquo | |check| | |check| | |check| | |check| | |check| | 7.12.10.3 | F.10.7.3 | 220a9aff440SNick Desaulniers+------------------+------------------+-----------------+------------------------+----------------------+------------------------+------------------------+----------------------------+ 221a9aff440SNick Desaulniers| rint | |check| | |check| | |check| | |check| | |check| | 7.12.9.4 | F.10.6.4 | 222a9aff440SNick Desaulniers+------------------+------------------+-----------------+------------------------+----------------------+------------------------+------------------------+----------------------------+ 223a9aff440SNick Desaulniers| round | |check| | |check| | |check| | |check| | |check| | 7.12.9.6 | F.10.6.6 | 224a9aff440SNick Desaulniers+------------------+------------------+-----------------+------------------------+----------------------+------------------------+------------------------+----------------------------+ 225a9aff440SNick Desaulniers| roundeven | |check| | |check| | |check| | |check| | |check| | 7.12.9.8 | F.10.6.8 | 226a9aff440SNick Desaulniers+------------------+------------------+-----------------+------------------------+----------------------+------------------------+------------------------+----------------------------+ 227a9aff440SNick Desaulniers| scalbln | |check| | |check| | |check| | |check| | |check| | 7.12.6.19 | F.10.3.19 | 228a9aff440SNick Desaulniers+------------------+------------------+-----------------+------------------------+----------------------+------------------------+------------------------+----------------------------+ 229a9aff440SNick Desaulniers| scalbn | |check| | |check| | |check| | |check| | |check| | 7.12.6.19 | F.10.3.19 | 230a9aff440SNick Desaulniers+------------------+------------------+-----------------+------------------------+----------------------+------------------------+------------------------+----------------------------+ 231a9aff440SNick Desaulniers| setpayload | |check| | |check| | |check| | |check| | |check| | F.10.13.2 | N/A | 232a9aff440SNick Desaulniers+------------------+------------------+-----------------+------------------------+----------------------+------------------------+------------------------+----------------------------+ 233a9aff440SNick Desaulniers| setpayloadsig | |check| | |check| | |check| | |check| | |check| | F.10.13.3 | N/A | 234a9aff440SNick Desaulniers+------------------+------------------+-----------------+------------------------+----------------------+------------------------+------------------------+----------------------------+ 235a9aff440SNick Desaulniers| totalorder | |check| | |check| | |check| | |check| | |check| | F.10.12.1 | N/A | 236a9aff440SNick Desaulniers+------------------+------------------+-----------------+------------------------+----------------------+------------------------+------------------------+----------------------------+ 237a9aff440SNick Desaulniers| totalordermag | |check| | |check| | |check| | |check| | |check| | F.10.12.2 | N/A | 238a9aff440SNick Desaulniers+------------------+------------------+-----------------+------------------------+----------------------+------------------------+------------------------+----------------------------+ 239a9aff440SNick Desaulniers| trunc | |check| | |check| | |check| | |check| | |check| | 7.12.9.9 | F.10.6.9 | 240a9aff440SNick Desaulniers+------------------+------------------+-----------------+------------------------+----------------------+------------------------+------------------------+----------------------------+ 241a9aff440SNick Desaulniers| ufromfp | |check| | |check| | |check| | |check| | |check| | 7.12.9.10 | F.10.6.10 | 242a9aff440SNick Desaulniers+------------------+------------------+-----------------+------------------------+----------------------+------------------------+------------------------+----------------------------+ 243a9aff440SNick Desaulniers| ufromfpx | |check| | |check| | |check| | |check| | |check| | 7.12.9.11 | F.10.6.11 | 244a9aff440SNick Desaulniers+------------------+------------------+-----------------+------------------------+----------------------+------------------------+------------------------+----------------------------+ 245a9aff440SNick Desaulniers 246a9aff440SNick Desaulniers 247a9aff440SNick DesaulniersHigher Math Functions 248a9aff440SNick Desaulniers===================== 249a9aff440SNick Desaulniers 250a9aff440SNick Desaulniers+-----------+------------------+-----------------+------------------------+----------------------+------------------------+------------------------+----------------------------+ 251a9aff440SNick Desaulniers| <Func> | <Func_f> (float) | <Func> (double) | <Func_l> (long double) | <Func_f16> (float16) | <Func_f128> (float128) | C23 Definition Section | C23 Error Handling Section | 252a9aff440SNick Desaulniers+===========+==================+=================+========================+======================+========================+========================+============================+ 253a9aff440SNick Desaulniers| acos | |check| | | | | | 7.12.4.1 | F.10.1.1 | 254a9aff440SNick Desaulniers+-----------+------------------+-----------------+------------------------+----------------------+------------------------+------------------------+----------------------------+ 255a9aff440SNick Desaulniers| acosh | |check| | | | | | 7.12.5.1 | F.10.2.1 | 256a9aff440SNick Desaulniers+-----------+------------------+-----------------+------------------------+----------------------+------------------------+------------------------+----------------------------+ 257a9aff440SNick Desaulniers| acospi | | | | | | 7.12.4.8 | F.10.1.8 | 258a9aff440SNick Desaulniers+-----------+------------------+-----------------+------------------------+----------------------+------------------------+------------------------+----------------------------+ 259a9aff440SNick Desaulniers| asin | |check| | | | | | 7.12.4.2 | F.10.1.2 | 260a9aff440SNick Desaulniers+-----------+------------------+-----------------+------------------------+----------------------+------------------------+------------------------+----------------------------+ 261a9aff440SNick Desaulniers| asinh | |check| | | | | | 7.12.5.2 | F.10.2.2 | 262a9aff440SNick Desaulniers+-----------+------------------+-----------------+------------------------+----------------------+------------------------+------------------------+----------------------------+ 263a9aff440SNick Desaulniers| asinpi | | | | | | 7.12.4.9 | F.10.1.9 | 264a9aff440SNick Desaulniers+-----------+------------------+-----------------+------------------------+----------------------+------------------------+------------------------+----------------------------+ 265a9aff440SNick Desaulniers| atan | |check| | | | | | 7.12.4.3 | F.10.1.3 | 266a9aff440SNick Desaulniers+-----------+------------------+-----------------+------------------------+----------------------+------------------------+------------------------+----------------------------+ 267a9aff440SNick Desaulniers| atan2 | |check| | 1 ULP | | | | 7.12.4.4 | F.10.1.4 | 268a9aff440SNick Desaulniers+-----------+------------------+-----------------+------------------------+----------------------+------------------------+------------------------+----------------------------+ 269a9aff440SNick Desaulniers| atan2pi | | | | | | 7.12.4.11 | F.10.1.11 | 270a9aff440SNick Desaulniers+-----------+------------------+-----------------+------------------------+----------------------+------------------------+------------------------+----------------------------+ 271a9aff440SNick Desaulniers| atanh | |check| | | | | | 7.12.5.3 | F.10.2.3 | 272a9aff440SNick Desaulniers+-----------+------------------+-----------------+------------------------+----------------------+------------------------+------------------------+----------------------------+ 273a9aff440SNick Desaulniers| atanpi | | | | | | 7.12.4.10 | F.10.1.10 | 274a9aff440SNick Desaulniers+-----------+------------------+-----------------+------------------------+----------------------+------------------------+------------------------+----------------------------+ 275a9aff440SNick Desaulniers| cbrt | |check| | |check| | | | | 7.12.7.1 | F.10.4.1 | 276a9aff440SNick Desaulniers+-----------+------------------+-----------------+------------------------+----------------------+------------------------+------------------------+----------------------------+ 277a9aff440SNick Desaulniers| compoundn | | | | | | 7.12.7.2 | F.10.4.2 | 278a9aff440SNick Desaulniers+-----------+------------------+-----------------+------------------------+----------------------+------------------------+------------------------+----------------------------+ 2796a865b6dSwldfngrs| cos | |check| | |check| | | |check| | | 7.12.4.5 | F.10.1.5 | 280a9aff440SNick Desaulniers+-----------+------------------+-----------------+------------------------+----------------------+------------------------+------------------------+----------------------------+ 281a9aff440SNick Desaulniers| cosh | |check| | | | |check| | | 7.12.5.4 | F.10.2.4 | 282a9aff440SNick Desaulniers+-----------+------------------+-----------------+------------------------+----------------------+------------------------+------------------------+----------------------------+ 283a9aff440SNick Desaulniers| cospi | |check| | | | |check| | | 7.12.4.12 | F.10.1.12 | 284a9aff440SNick Desaulniers+-----------+------------------+-----------------+------------------------+----------------------+------------------------+------------------------+----------------------------+ 285a9aff440SNick Desaulniers| dsqrt | N/A | N/A | |check| | N/A | |check|\* | 7.12.14.6 | F.10.11 | 286a9aff440SNick Desaulniers+-----------+------------------+-----------------+------------------------+----------------------+------------------------+------------------------+----------------------------+ 287a9aff440SNick Desaulniers| erf | |check| | | | | | 7.12.8.1 | F.10.5.1 | 288a9aff440SNick Desaulniers+-----------+------------------+-----------------+------------------------+----------------------+------------------------+------------------------+----------------------------+ 289a9aff440SNick Desaulniers| erfc | | | | | | 7.12.8.2 | F.10.5.2 | 290a9aff440SNick Desaulniers+-----------+------------------+-----------------+------------------------+----------------------+------------------------+------------------------+----------------------------+ 291a9aff440SNick Desaulniers| exp | |check| | |check| | | |check| | | 7.12.6.1 | F.10.3.1 | 292a9aff440SNick Desaulniers+-----------+------------------+-----------------+------------------------+----------------------+------------------------+------------------------+----------------------------+ 293a9aff440SNick Desaulniers| exp10 | |check| | |check| | | |check| | | 7.12.6.2 | F.10.3.2 | 294a9aff440SNick Desaulniers+-----------+------------------+-----------------+------------------------+----------------------+------------------------+------------------------+----------------------------+ 295a9aff440SNick Desaulniers| exp10m1 | |check| | | | |check| | | 7.12.6.3 | F.10.3.3 | 296a9aff440SNick Desaulniers+-----------+------------------+-----------------+------------------------+----------------------+------------------------+------------------------+----------------------------+ 297a9aff440SNick Desaulniers| exp2 | |check| | |check| | | |check| | | 7.12.6.4 | F.10.3.4 | 298a9aff440SNick Desaulniers+-----------+------------------+-----------------+------------------------+----------------------+------------------------+------------------------+----------------------------+ 299a9aff440SNick Desaulniers| exp2m1 | |check| | | | |check| | | 7.12.6.5 | F.10.3.5 | 300a9aff440SNick Desaulniers+-----------+------------------+-----------------+------------------------+----------------------+------------------------+------------------------+----------------------------+ 301a9aff440SNick Desaulniers| expm1 | |check| | |check| | | |check| | | 7.12.6.6 | F.10.3.6 | 302a9aff440SNick Desaulniers+-----------+------------------+-----------------+------------------------+----------------------+------------------------+------------------------+----------------------------+ 303a9aff440SNick Desaulniers| fma | |check| | |check| | | | | 7.12.13.1 | F.10.10.1 | 304a9aff440SNick Desaulniers+-----------+------------------+-----------------+------------------------+----------------------+------------------------+------------------------+----------------------------+ 305a9aff440SNick Desaulniers| f16sqrt | |check|\* | |check|\* | |check|\* | N/A | |check| | 7.12.14.6 | F.10.11 | 306a9aff440SNick Desaulniers+-----------+------------------+-----------------+------------------------+----------------------+------------------------+------------------------+----------------------------+ 307a9aff440SNick Desaulniers| fsqrt | N/A | |check| | |check| | N/A | |check|\* | 7.12.14.6 | F.10.11 | 308a9aff440SNick Desaulniers+-----------+------------------+-----------------+------------------------+----------------------+------------------------+------------------------+----------------------------+ 309a9aff440SNick Desaulniers| hypot | |check| | |check| | | | | 7.12.7.4 | F.10.4.4 | 310a9aff440SNick Desaulniers+-----------+------------------+-----------------+------------------------+----------------------+------------------------+------------------------+----------------------------+ 311a9aff440SNick Desaulniers| lgamma | | | | | | 7.12.8.3 | F.10.5.3 | 312a9aff440SNick Desaulniers+-----------+------------------+-----------------+------------------------+----------------------+------------------------+------------------------+----------------------------+ 313a9aff440SNick Desaulniers| log | |check| | |check| | | |check| | | 7.12.6.11 | F.10.3.11 | 314a9aff440SNick Desaulniers+-----------+------------------+-----------------+------------------------+----------------------+------------------------+------------------------+----------------------------+ 315a9aff440SNick Desaulniers| log10 | |check| | |check| | | |check| | | 7.12.6.12 | F.10.3.12 | 316a9aff440SNick Desaulniers+-----------+------------------+-----------------+------------------------+----------------------+------------------------+------------------------+----------------------------+ 317a9aff440SNick Desaulniers| log10p1 | | | | | | 7.12.6.13 | F.10.3.13 | 318a9aff440SNick Desaulniers+-----------+------------------+-----------------+------------------------+----------------------+------------------------+------------------------+----------------------------+ 319a9aff440SNick Desaulniers| log1p | |check| | |check| | | | | 7.12.6.14 | F.10.3.14 | 320a9aff440SNick Desaulniers+-----------+------------------+-----------------+------------------------+----------------------+------------------------+------------------------+----------------------------+ 321a9aff440SNick Desaulniers| log2 | |check| | |check| | | |check| | | 7.12.6.15 | F.10.3.15 | 322a9aff440SNick Desaulniers+-----------+------------------+-----------------+------------------------+----------------------+------------------------+------------------------+----------------------------+ 323a9aff440SNick Desaulniers| log2p1 | | | | | | 7.12.6.16 | F.10.3.16 | 324a9aff440SNick Desaulniers+-----------+------------------+-----------------+------------------------+----------------------+------------------------+------------------------+----------------------------+ 325a9aff440SNick Desaulniers| logp1 | | | | | | 7.12.6.14 | F.10.3.14 | 326a9aff440SNick Desaulniers+-----------+------------------+-----------------+------------------------+----------------------+------------------------+------------------------+----------------------------+ 327a9aff440SNick Desaulniers| pow | |check| | 1 ULP | | | | 7.12.7.5 | F.10.4.5 | 328a9aff440SNick Desaulniers+-----------+------------------+-----------------+------------------------+----------------------+------------------------+------------------------+----------------------------+ 329a9aff440SNick Desaulniers| powi\* | | | | | | | | 330a9aff440SNick Desaulniers+-----------+------------------+-----------------+------------------------+----------------------+------------------------+------------------------+----------------------------+ 331a9aff440SNick Desaulniers| pown | | | | | | 7.12.7.6 | F.10.4.6 | 332a9aff440SNick Desaulniers+-----------+------------------+-----------------+------------------------+----------------------+------------------------+------------------------+----------------------------+ 333a9aff440SNick Desaulniers| powr | | | | | | 7.12.7.7 | F.10.4.7 | 334a9aff440SNick Desaulniers+-----------+------------------+-----------------+------------------------+----------------------+------------------------+------------------------+----------------------------+ 335a9aff440SNick Desaulniers| rootn | | | | | | 7.12.7.8 | F.10.4.8 | 336a9aff440SNick Desaulniers+-----------+------------------+-----------------+------------------------+----------------------+------------------------+------------------------+----------------------------+ 337a9aff440SNick Desaulniers| rsqrt | | | | | | 7.12.7.9 | F.10.4.9 | 338a9aff440SNick Desaulniers+-----------+------------------+-----------------+------------------------+----------------------+------------------------+------------------------+----------------------------+ 339a9aff440SNick Desaulniers| sin | |check| | |check| | | |check| | | 7.12.4.6 | F.10.1.6 | 340a9aff440SNick Desaulniers+-----------+------------------+-----------------+------------------------+----------------------+------------------------+------------------------+----------------------------+ 341a9aff440SNick Desaulniers| sincos | |check| | |check| | | | | | | 342a9aff440SNick Desaulniers+-----------+------------------+-----------------+------------------------+----------------------+------------------------+------------------------+----------------------------+ 343a9aff440SNick Desaulniers| sinh | |check| | | | |check| | | 7.12.5.5 | F.10.2.5 | 344a9aff440SNick Desaulniers+-----------+------------------+-----------------+------------------------+----------------------+------------------------+------------------------+----------------------------+ 345a9aff440SNick Desaulniers| sinpi | |check| | | | |check| | | 7.12.4.13 | F.10.1.13 | 346a9aff440SNick Desaulniers+-----------+------------------+-----------------+------------------------+----------------------+------------------------+------------------------+----------------------------+ 347a9aff440SNick Desaulniers| sqrt | |check| | |check| | |check| | |check| | |check| | 7.12.7.10 | F.10.4.10 | 348a9aff440SNick Desaulniers+-----------+------------------+-----------------+------------------------+----------------------+------------------------+------------------------+----------------------------+ 349*ecf4f95cSwldfngrs| tan | |check| | |check| | | |check| | | 7.12.4.7 | F.10.1.7 | 350a9aff440SNick Desaulniers+-----------+------------------+-----------------+------------------------+----------------------+------------------------+------------------------+----------------------------+ 351a9aff440SNick Desaulniers| tanh | |check| | | | |check| | | 7.12.5.6 | F.10.2.6 | 352a9aff440SNick Desaulniers+-----------+------------------+-----------------+------------------------+----------------------+------------------------+------------------------+----------------------------+ 353a9aff440SNick Desaulniers| tanpi | | | | |check| | | 7.12.4.14 | F.10.1.14 | 354a9aff440SNick Desaulniers+-----------+------------------+-----------------+------------------------+----------------------+------------------------+------------------------+----------------------------+ 355a9aff440SNick Desaulniers| tgamma | | | | | | 7.12.8.4 | F.10.5.4 | 356a9aff440SNick Desaulniers+-----------+------------------+-----------------+------------------------+----------------------+------------------------+------------------------+----------------------------+ 357a9aff440SNick Desaulniers 358a9aff440SNick DesaulniersLegends: 359a9aff440SNick Desaulniers 360a9aff440SNick Desaulniers* |check| : correctly rounded for all 4 rounding modes. 361a9aff440SNick Desaulniers* CR: correctly rounded for the default rounding mode (round-to-the-nearest, 362a9aff440SNick Desaulniers tie-to-even). 363a9aff440SNick Desaulniers* x ULPs: largest errors recorded. 364a9aff440SNick Desaulniers* N/A: Not defined in the standard or will not be added. 365a9aff440SNick Desaulniers* \*: LLVM libc extension. 366a9aff440SNick Desaulniers 367a9aff440SNick Desaulniers.. 368a9aff440SNick Desaulniers TODO(lntue): Add a new page to discuss about the algorithms used in the 369a9aff440SNick Desaulniers implementations and include the link here. 370a9aff440SNick Desaulniers 371a9aff440SNick Desaulniers 372a9aff440SNick DesaulniersPerformance 373a9aff440SNick Desaulniers=========== 374a9aff440SNick Desaulniers 375a9aff440SNick Desaulniers* Simple performance testings are located at: `libc/test/src/math/performance_testing <https://github.com/llvm/llvm-project/tree/main/libc/test/src/math/performance_testing>`_. 376a9aff440SNick Desaulniers 377a9aff440SNick Desaulniers* We also use the *perf* tool from the `CORE-MATH <https://core-math.gitlabpages.inria.fr/>`_ 378a9aff440SNick Desaulniers project: `link <https://gitlab.inria.fr/core-math/core-math/-/tree/master>`_. 379a9aff440SNick Desaulniers The performance results from the CORE-MATH's perf tool are reported in the 380a9aff440SNick Desaulniers table below, using the system library as reference (such as the `GNU C library <https://www.gnu.org/software/libc/>`_ 381a9aff440SNick Desaulniers on Linux). Fmod performance results obtained with "performance_testing". 382a9aff440SNick Desaulniers 383a9aff440SNick Desaulniers+--------------+-------------------------------+-------------------------------+-------------------------------------+----------------------------------------------------------------------+ 384a9aff440SNick Desaulniers| <Func> | Reciprocal throughput (clk) | Latency (clk) | Testing ranges | Testing configuration | 385a9aff440SNick Desaulniers| +-----------+-------------------+-----------+-------------------+ +-------------+-------------------------+--------------+---------------+ 386a9aff440SNick Desaulniers| | LLVM libc | Reference (glibc) | LLVM libc | Reference (glibc) | | CPU | OS | Compiler | Special flags | 387a9aff440SNick Desaulniers+==============+===========+===================+===========+===================+=====================================+=============+=========================+==============+===============+ 388a9aff440SNick Desaulniers| acosf | 24 | 29 | 62 | 77 | :math:`[-1, 1]` | Ryzen 1700 | Ubuntu 22.04 LTS x86_64 | Clang 14.0.0 | FMA | 389a9aff440SNick Desaulniers+--------------+-----------+-------------------+-----------+-------------------+-------------------------------------+-------------+-------------------------+--------------+---------------+ 390a9aff440SNick Desaulniers| acoshf | 18 | 26 | 73 | 74 | :math:`[1, 21]` | Ryzen 1700 | Ubuntu 22.04 LTS x86_64 | Clang 14.0.0 | FMA | 391a9aff440SNick Desaulniers+--------------+-----------+-------------------+-----------+-------------------+-------------------------------------+-------------+-------------------------+--------------+---------------+ 392a9aff440SNick Desaulniers| asinf | 23 | 27 | 62 | 62 | :math:`[-1, 1]` | Ryzen 1700 | Ubuntu 22.04 LTS x86_64 | Clang 14.0.0 | FMA | 393a9aff440SNick Desaulniers+--------------+-----------+-------------------+-----------+-------------------+-------------------------------------+-------------+-------------------------+--------------+---------------+ 394a9aff440SNick Desaulniers| asinhf | 21 | 39 | 77 | 91 | :math:`[-10, 10]` | Ryzen 1700 | Ubuntu 22.04 LTS x86_64 | Clang 14.0.0 | FMA | 395a9aff440SNick Desaulniers+--------------+-----------+-------------------+-----------+-------------------+-------------------------------------+-------------+-------------------------+--------------+---------------+ 396a9aff440SNick Desaulniers| atanf | 27 | 29 | 79 | 68 | :math:`[-10, 10]` | Ryzen 1700 | Ubuntu 22.04 LTS x86_64 | Clang 14.0.0 | FMA | 397a9aff440SNick Desaulniers+--------------+-----------+-------------------+-----------+-------------------+-------------------------------------+-------------+-------------------------+--------------+---------------+ 398a9aff440SNick Desaulniers| atanhf | 18 | 66 | 68 | 133 | :math:`[-1, 1]` | Ryzen 1700 | Ubuntu 22.04 LTS x86_64 | Clang 14.0.0 | FMA | 399a9aff440SNick Desaulniers+--------------+-----------+-------------------+-----------+-------------------+-------------------------------------+-------------+-------------------------+--------------+---------------+ 400a9aff440SNick Desaulniers| cosf | 13 | 32 | 53 | 59 | :math:`[0, 2\pi]` | Ryzen 1700 | Ubuntu 20.04 LTS x86_64 | Clang 12.0.0 | FMA | 401a9aff440SNick Desaulniers+--------------+-----------+-------------------+-----------+-------------------+-------------------------------------+-------------+-------------------------+--------------+---------------+ 402a9aff440SNick Desaulniers| coshf | 14 | 20 | 50 | 48 | :math:`[-10, 10]` | Ryzen 1700 | Ubuntu 22.04 LTS x86_64 | Clang 14.0.0 | FMA | 403a9aff440SNick Desaulniers+--------------+-----------+-------------------+-----------+-------------------+-------------------------------------+-------------+-------------------------+--------------+---------------+ 404a9aff440SNick Desaulniers| expf | 9 | 7 | 44 | 38 | :math:`[-10, 10]` | Ryzen 1700 | Ubuntu 20.04 LTS x86_64 | Clang 12.0.0 | FMA | 405a9aff440SNick Desaulniers+--------------+-----------+-------------------+-----------+-------------------+-------------------------------------+-------------+-------------------------+--------------+---------------+ 406a9aff440SNick Desaulniers| exp10f | 10 | 8 | 40 | 38 | :math:`[-10, 10]` | Ryzen 1700 | Ubuntu 22.04 LTS x86_64 | Clang 14.0.0 | FMA | 407a9aff440SNick Desaulniers+--------------+-----------+-------------------+-----------+-------------------+-------------------------------------+-------------+-------------------------+--------------+---------------+ 408a9aff440SNick Desaulniers| exp2f | 9 | 6 | 35 | 31 | :math:`[-10, 10]` | Ryzen 1700 | Ubuntu 22.04 LTS x86_64 | Clang 14.0.0 | FMA | 409a9aff440SNick Desaulniers+--------------+-----------+-------------------+-----------+-------------------+-------------------------------------+-------------+-------------------------+--------------+---------------+ 410a9aff440SNick Desaulniers| expm1f | 9 | 44 | 42 | 121 | :math:`[-10, 10]` | Ryzen 1700 | Ubuntu 20.04 LTS x86_64 | Clang 12.0.0 | FMA | 411a9aff440SNick Desaulniers+--------------+-----------+-------------------+-----------+-------------------+-------------------------------------+-------------+-------------------------+--------------+---------------+ 412a9aff440SNick Desaulniers| fmodf | 73 | 263 | - | - | [MIN_NORMAL, MAX_NORMAL] | i5 mobile | Ubuntu 20.04 LTS x86_64 | Clang 12.0.0 | | 413a9aff440SNick Desaulniers| +-----------+-------------------+-----------+-------------------+-------------------------------------+-------------+-------------------------+--------------+---------------+ 414a9aff440SNick Desaulniers| | 9 | 11 | - | - | [0, MAX_SUBNORMAL] | i5 mobile | Ubuntu 20.04 LTS x86_64 | Clang 12.0.0 | | 415a9aff440SNick Desaulniers+--------------+-----------+-------------------+-----------+-------------------+-------------------------------------+-------------+-------------------------+--------------+---------------+ 416a9aff440SNick Desaulniers| fmod | 595 | 3297 | - | - | [MIN_NORMAL, MAX_NORMAL] | i5 mobile | Ubuntu 20.04 LTS x86_64 | Clang 12.0.0 | | 417a9aff440SNick Desaulniers| +-----------+-------------------+-----------+-------------------+-------------------------------------+-------------+-------------------------+--------------+---------------+ 418a9aff440SNick Desaulniers| | 14 | 13 | - | - | [0, MAX_SUBNORMAL] | i5 mobile | Ubuntu 20.04 LTS x86_64 | Clang 12.0.0 | | 419a9aff440SNick Desaulniers+--------------+-----------+-------------------+-----------+-------------------+-------------------------------------+-------------+-------------------------+--------------+---------------+ 420a9aff440SNick Desaulniers| hypotf | 25 | 15 | 64 | 49 | :math:`[-10, 10] \times [-10, 10]` | Ryzen 1700 | Ubuntu 20.04 LTS x86_64 | Clang 12.0.0 | | 421a9aff440SNick Desaulniers+--------------+-----------+-------------------+-----------+-------------------+-------------------------------------+-------------+-------------------------+--------------+---------------+ 422a9aff440SNick Desaulniers| logf | 12 | 10 | 56 | 46 | :math:`[e^{-1}, e]` | Ryzen 1700 | Ubuntu 20.04 LTS x86_64 | Clang 12.0.0 | FMA | 423a9aff440SNick Desaulniers+--------------+-----------+-------------------+-----------+-------------------+-------------------------------------+-------------+-------------------------+--------------+---------------+ 424a9aff440SNick Desaulniers| log10f | 9 | 17 | 35 | 48 | :math:`[e^{-1}, e]` | Ryzen 5900X | Ubuntu 22.04 LTS x86_64 | Clang 15.0.6 | FMA | 425a9aff440SNick Desaulniers+--------------+-----------+-------------------+-----------+-------------------+-------------------------------------+-------------+-------------------------+--------------+---------------+ 426a9aff440SNick Desaulniers| 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 | 427a9aff440SNick Desaulniers+--------------+-----------+-------------------+-----------+-------------------+-------------------------------------+-------------+-------------------------+--------------+---------------+ 428a9aff440SNick Desaulniers| log2f | 13 | 10 | 57 | 46 | :math:`[e^{-1}, e]` | Ryzen 1700 | Ubuntu 20.04 LTS x86_64 | Clang 12.0.0 | FMA | 429a9aff440SNick Desaulniers+--------------+-----------+-------------------+-----------+-------------------+-------------------------------------+-------------+-------------------------+--------------+---------------+ 430a9aff440SNick Desaulniers| sinf | 12 | 25 | 51 | 57 | :math:`[-\pi, \pi]` | Ryzen 1700 | Ubuntu 20.04 LTS x86_64 | Clang 12.0.0 | FMA | 431a9aff440SNick Desaulniers+--------------+-----------+-------------------+-----------+-------------------+-------------------------------------+-------------+-------------------------+--------------+---------------+ 432a9aff440SNick Desaulniers| sincosf | 19 | 30 | 57 | 68 | :math:`[-\pi, \pi]` | Ryzen 1700 | Ubuntu 20.04 LTS x86_64 | Clang 12.0.0 | FMA | 433a9aff440SNick Desaulniers+--------------+-----------+-------------------+-----------+-------------------+-------------------------------------+-------------+-------------------------+--------------+---------------+ 434a9aff440SNick Desaulniers| sinhf | 13 | 63 | 48 | 137 | :math:`[-10, 10]` | Ryzen 1700 | Ubuntu 22.04 LTS x86_64 | Clang 14.0.0 | FMA | 435a9aff440SNick Desaulniers+--------------+-----------+-------------------+-----------+-------------------+-------------------------------------+-------------+-------------------------+--------------+---------------+ 436a9aff440SNick Desaulniers| tanf | 16 | 50 | 61 | 107 | :math:`[-\pi, \pi]` | Ryzen 1700 | Ubuntu 22.04 LTS x86_64 | Clang 14.0.0 | FMA | 437a9aff440SNick Desaulniers+--------------+-----------+-------------------+-----------+-------------------+-------------------------------------+-------------+-------------------------+--------------+---------------+ 438a9aff440SNick Desaulniers| tanhf | 13 | 55 | 57 | 123 | :math:`[-10, 10]` | Ryzen 1700 | Ubuntu 22.04 LTS x86_64 | Clang 14.0.0 | FMA | 439a9aff440SNick Desaulniers+--------------+-----------+-------------------+-----------+-------------------+-------------------------------------+-------------+-------------------------+--------------+---------------+ 440a9aff440SNick Desaulniers 441a9aff440SNick DesaulniersAlgorithms + Implementation Details 442a9aff440SNick Desaulniers=================================== 443a9aff440SNick Desaulniers 444a9aff440SNick Desaulniers* :doc:`log` 445a9aff440SNick Desaulniers 446a9aff440SNick DesaulniersFixed-point Arithmetics 447a9aff440SNick Desaulniers======================= 448a9aff440SNick Desaulniers 449a9aff440SNick Desaulniers* :doc:`stdfix` 450a9aff440SNick Desaulniers 451a9aff440SNick DesaulniersReferences 452a9aff440SNick Desaulniers========== 453a9aff440SNick Desaulniers 454a9aff440SNick Desaulniers* `CRLIBM <https://hal-ens-lyon.archives-ouvertes.fr/ensl-01529804/file/crlibm.pdf>`_. 455a9aff440SNick Desaulniers* `RLIBM <https://people.cs.rutgers.edu/~sn349/rlibm/>`_. 456a9aff440SNick Desaulniers* `Sollya <https://www.sollya.org/>`_. 457a9aff440SNick Desaulniers* `The CORE-MATH Project <https://core-math.gitlabpages.inria.fr/>`_. 458a9aff440SNick Desaulniers* `The GNU C Library (glibc) <https://www.gnu.org/software/libc/>`_. 459a9aff440SNick Desaulniers* `The GNU MPFR Library <https://www.mpfr.org/>`_. 460