2022-10-28 01:09:38 -07:00
.. _math:
2022-10-15 12:44:02 +00:00
==============
Math Functions
==============
2022-06-15 19:57:46 -04:00
2023-02-14 12:36:07 -05:00
.. include :: ../check.rst
2022-06-15 19:57:46 -04:00
2022-10-18 03:12:33 +00:00
.. raw :: html
<style> .green {color:green} </style>
.. role :: green
2023-01-08 17:19:13 -05:00
.. toctree ::
:hidden:
2023-02-14 12:36:07 -05:00
log.rst
2024-02-13 16:48:14 -05:00
stdfix.rst
2023-01-08 17:19:13 -05:00
2022-10-18 03:12:33 +00:00
2022-06-15 19:57:46 -04:00
.. contents :: Table of Contents
:depth: 4
:local:
2022-10-15 12:44:02 +00:00
Source Locations
================
2022-06-15 19:57:46 -04:00
2022-10-15 12:44:02 +00:00
- The main source is located at: `libc/src/math <https://github.com/llvm/llvm-project/tree/main/libc/src/math> `_ .
- The tests are located at: `libc/test/src/math <https://github.com/llvm/llvm-project/tree/main/libc/test/src/math> `_ .
- The floating point utilities are located at: `libc/src/__support/FPUtil <https://github.com/llvm/llvm-project/tree/main/libc/src/__support/FPUtil> `_ .
2022-06-15 19:57:46 -04:00
Implementation Requirements / Goals
===================================
* 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 <https://en.cppreference.com/w/c/numeric/fenv/FE_round> `_ .
The current rounding mode of the floating point environment is used to perform
computations and produce the final results.
- To test for correctness, we compare the outputs with other correctly rounded
2022-06-17 09:32:06 -04:00
multiple-precision math libraries such as the `GNU MPFR library <https://www.mpfr.org/> `_
2022-06-15 19:57:46 -04:00
or the `CORE-MATH library <https://core-math.gitlabpages.inria.fr/> `_ .
* 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:
- The average performance should be comparable to other `` libc ``
implementations.
- The worst case performance should be within 10X-20X of the average.
- Platform-specific implementations or instructions could be added whenever it
makes sense and provides significant performance boost.
* 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.
Add a new math function to LLVM libc
====================================
* 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> `_ .
Implementation Status
=====================
2023-05-25 15:54:00 -04:00
* To check math functions enabled for Linux:
- `linux-x86_64 <https://github.com/llvm/llvm-project/tree/main/libc/config/linux/x86_64/entrypoints.txt> `_
- `linux-aarch64 <https://github.com/llvm/llvm-project/tree/main/libc/config/linux/aarch64/entrypoints.txt> `_
- `linux-aarch32 <https://github.com/llvm/llvm-project/tree/main/libc/config/linux/arm/entrypoints.txt> `_
- `linux-riscv64 <https://github.com/llvm/llvm-project/tree/main/libc/config/linux/riscv64/entrypoints.txt> `_
* To check math functions enabled for Windows:
2024-02-23 16:34:00 -06:00
- `windows-x86_64 <https://github.com/llvm/llvm-project/tree/main/libc/config/windows/entrypoints.txt> `_
2023-05-25 15:54:00 -04:00
- windows-aarch64 - to be added
* To check math functions enabled for macOS:
- `darwin-x86_64 <https://github.com/llvm/llvm-project/tree/main/libc/config/darwin/x86_64/entrypoints.txt> `_
- `darwin-aarch64 <https://github.com/llvm/llvm-project/tree/main/libc/config/darwin/arm/entrypoints.txt> `_
* To check math functions enabled for GPU:
2024-02-23 16:34:00 -06:00
- `gpu-entrypoints <https://github.com/llvm/llvm-project/tree/main/libc/config/gpu/entrypoints.txt> `_
2023-05-25 15:54:00 -04:00
* To check math functions enabled for embedded system:
2024-02-23 16:34:00 -06:00
- `baremetal-aarch32 <https://github.com/llvm/llvm-project/tree/main/libc/config/baremetal/arm/entrypoints.txt> `_
2023-05-25 15:54:00 -04:00
2023-11-10 14:32:59 -05:00
- baremetal-riscv32 - to be added
2023-05-25 15:54:00 -04:00
2022-06-15 19:57:46 -04:00
Basic Operations
----------------
2024-03-26 17:58:22 +05:30
+------------------+---------------------------------------+-------------------+-------------------+-------------------+-------------------+
| <Func> | Linux | Windows | MacOS | Embedded | GPU |
| +---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+
| | x86_64 | aarch64 | aarch32 | riscv64 | x86_64 | aarch64 | x86_64 | aarch64 | aarch32 | riscv32 | AMD | nVidia |
+==================+=========+=========+=========+=========+=========+=========+=========+=========+=========+=========+=========+=========+
| ceil | |check| | |check| | |check| | |check| | |check| | | | |check| | |check| | |check| | | |
+------------------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+
| ceilf | |check| | |check| | |check| | |check| | |check| | | | |check| | |check| | |check| | | |
+------------------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+
| ceill | |check| | |check| | |check| | |check| | |check| | | | |check| | |check| | |check| | | |
+------------------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+
| ceilf128 | |check| | |check| | | |check| | | | | | | | | |
+------------------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+
| canoninicalize | |check| | |check| | |check| | |check| | |check| | | | |check| | |check| | |check| | | |
+------------------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+
| canoninicalizef | |check| | |check| | |check| | |check| | |check| | | | |check| | |check| | |check| | | |
+------------------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+
| canoninicalizel | |check| | |check| | |check| | |check| | |check| | | | |check| | |check| | |check| | | |
+------------------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+
|canoninicalizef128| |check| | |check| | | |check| | | | | | | | | |
+------------------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+
| copysign | |check| | |check| | |check| | |check| | |check| | | | |check| | |check| | |check| | | |
+------------------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+
| copysignf | |check| | |check| | |check| | |check| | |check| | | | |check| | |check| | |check| | | |
+------------------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+
| copysignl | |check| | |check| | |check| | |check| | |check| | | | |check| | |check| | |check| | | |
+------------------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+
| copysignf128 | |check| | |check| | | |check| | | | | | | | | |
+------------------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+
| fabs | |check| | |check| | |check| | |check| | |check| | | | |check| | |check| | |check| | | |
+------------------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+
| fabsf | |check| | |check| | |check| | |check| | |check| | | | |check| | |check| | |check| | | |
+------------------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+
| fabsl | |check| | |check| | |check| | |check| | |check| | | | |check| | |check| | |check| | | |
+------------------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+
| fabsf128 | |check| | |check| | | |check| | | | | | | | | |
+------------------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+
| fdim | |check| | |check| | |check| | |check| | |check| | | | |check| | |check| | |check| | | |
+------------------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+
| fdimf | |check| | |check| | |check| | |check| | |check| | | | |check| | |check| | |check| | | |
+------------------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+
| fdiml | |check| | |check| | |check| | |check| | |check| | | | |check| | |check| | |check| | | |
+------------------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+
| fdimf128 | |check| | |check| | | |check| | | | | | | | | |
+------------------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+
| floor | |check| | |check| | |check| | |check| | |check| | | | |check| | |check| | |check| | | |
+------------------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+
| floorf | |check| | |check| | |check| | |check| | |check| | | | |check| | |check| | |check| | | |
+------------------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+
| floorl | |check| | |check| | |check| | |check| | |check| | | | |check| | |check| | |check| | | |
+------------------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+
| floorf128 | |check| | |check| | | |check| | | | | | | | | |
+------------------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+
| fmax | |check| | |check| | |check| | |check| | |check| | | | |check| | |check| | |check| | | |
+------------------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+
| fmaxf | |check| | |check| | |check| | |check| | |check| | | | |check| | |check| | |check| | | |
+------------------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+
| fmaxf128 | |check| | |check| | | |check| | | | | | | | | |
+------------------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+
| fmaxl | |check| | |check| | |check| | |check| | |check| | | | |check| | |check| | |check| | | |
+------------------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+
| fmin | |check| | |check| | |check| | |check| | |check| | | | |check| | |check| | |check| | | |
+------------------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+
| fminf | |check| | |check| | |check| | |check| | |check| | | | |check| | |check| | |check| | | |
+------------------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+
| fminf128 | |check| | |check| | | |check| | | | | | | | | |
+------------------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+
| fminl | |check| | |check| | |check| | |check| | |check| | | | |check| | |check| | |check| | | |
+------------------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+
| fmod | |check| | |check| | |check| | |check| | |check| | | | |check| | |check| | |check| | | |
+------------------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+
| fmodf | |check| | |check| | |check| | |check| | |check| | | | |check| | |check| | |check| | | |
+------------------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+
| fmodl | |check| | |check| | | |check| | |check| | | | |check| | | | | |
+------------------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+
| fmodf128 | |check| | |check| | | |check| | | | | | | | | |
+------------------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+
| frexp | |check| | |check| | |check| | |check| | |check| | | | |check| | |check| | |check| | | |
+------------------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+
| frexpf | |check| | |check| | |check| | |check| | |check| | | | |check| | |check| | |check| | | |
+------------------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+
| frexpl | |check| | |check| | |check| | |check| | |check| | | | |check| | |check| | |check| | | |
+------------------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+
| frexpf128 | |check| | |check| | | |check| | | | | | | | | |
+------------------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+
2024-03-27 19:28:27 +00:00
| fromfp | |check| | |check| | |check| | |check| | | | | | | | | |
2024-03-26 17:58:22 +05:30
+------------------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+
2024-03-27 19:28:27 +00:00
| fromfpf | |check| | |check| | |check| | |check| | | | | | | | | |
2024-03-26 17:58:22 +05:30
+------------------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+
2024-03-27 19:28:27 +00:00
| fromfpl | |check| | |check| | |check| | |check| | | | | | | | | |
2024-03-26 17:58:22 +05:30
+------------------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+
2024-03-27 19:28:27 +00:00
| fromfpf128 | |check| | |check| | | |check| | | | | | | | | |
2024-03-26 17:58:22 +05:30
+------------------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+
2024-03-27 19:28:27 +00:00
| fromfpx | |check| | |check| | |check| | |check| | | | | | | | | |
2024-03-26 17:58:22 +05:30
+------------------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+
2024-03-27 19:28:27 +00:00
| fromfpxf | |check| | |check| | |check| | |check| | | | | | | | | |
2024-03-26 17:58:22 +05:30
+------------------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+
2024-03-27 19:28:27 +00:00
| fromfpxl | |check| | |check| | |check| | |check| | | | | | | | | |
2024-03-26 17:58:22 +05:30
+------------------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+
2024-03-27 19:28:27 +00:00
| fromfpxf128 | |check| | |check| | | |check| | | | | | | | | |
2024-03-26 17:58:22 +05:30
+------------------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+
| ilogb | |check| | |check| | |check| | |check| | |check| | | | |check| | |check| | |check| | | |
+------------------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+
| ilogbf | |check| | |check| | |check| | |check| | |check| | | | |check| | |check| | |check| | | |
+------------------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+
| ilogbl | |check| | |check| | |check| | |check| | |check| | | | |check| | |check| | |check| | | |
+------------------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+
| ilogf128 | |check| | |check| | | |check| | | | | | | | | |
+------------------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+
| ldexp | |check| | |check| | |check| | |check| | |check| | | | |check| | |check| | |check| | | |
+------------------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+
| ldexpf | |check| | |check| | |check| | |check| | |check| | | | |check| | |check| | |check| | | |
+------------------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+
| ldexpl | |check| | |check| | |check| | |check| | |check| | | | |check| | |check| | |check| | | |
+------------------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+
| ldexpf128 | |check| | |check| | | |check| | | | | | | | | |
+------------------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+
| llogb | |check| | |check| | |check| | |check| | |check| | | | |check| | |check| | |check| | | |
+------------------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+
| llogbf | |check| | |check| | |check| | |check| | |check| | | | |check| | |check| | |check| | | |
+------------------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+
| llogbl | |check| | |check| | |check| | |check| | |check| | | | |check| | |check| | |check| | | |
+------------------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+
| llogf128 | |check| | |check| | | |check| | | | | | | | | |
+------------------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+
| llrint | |check| | |check| | |check| | |check| | |check| | | | |check| | |check| | |check| | | |
+------------------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+
| llrintf | |check| | |check| | |check| | |check| | |check| | | | |check| | |check| | |check| | | |
+------------------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+
| llrintl | |check| | |check| | |check| | |check| | |check| | | | |check| | |check| | |check| | | |
+------------------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+
| llrintf128 | |check| | |check| | | |check| | | | | | | | | |
+------------------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+
| llround | |check| | |check| | |check| | |check| | |check| | | | |check| | |check| | |check| | | |
+------------------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+
| llroundf | |check| | |check| | |check| | |check| | |check| | | | |check| | |check| | |check| | | |
+------------------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+
| llroundl | |check| | |check| | |check| | |check| | |check| | | | |check| | |check| | |check| | | |
+------------------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+
| llroundf128 | |check| | |check| | | |check| | | | | | | | | |
+------------------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+
| logb | |check| | |check| | |check| | |check| | |check| | | | |check| | |check| | |check| | | |
+------------------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+
| logbf | |check| | |check| | |check| | |check| | |check| | | | |check| | |check| | |check| | | |
+------------------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+
| logbl | |check| | |check| | |check| | |check| | |check| | | | |check| | |check| | |check| | | |
+------------------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+
| logf128 | |check| | |check| | | |check| | | | | | | | | |
+------------------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+
| lrint | |check| | |check| | |check| | |check| | |check| | | | |check| | |check| | |check| | | |
+------------------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+
| lrintf | |check| | |check| | |check| | |check| | |check| | | | |check| | |check| | |check| | | |
+------------------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+
| lrintl | |check| | |check| | |check| | |check| | |check| | | | |check| | |check| | |check| | | |
+------------------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+
| lrintf128 | |check| | |check| | | |check| | | | | | | | | |
+------------------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+
| lround | |check| | |check| | |check| | |check| | |check| | | | |check| | |check| | |check| | | |
+------------------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+
| lroundf | |check| | |check| | |check| | |check| | |check| | | | |check| | |check| | |check| | | |
+------------------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+
| lroundl | |check| | |check| | |check| | |check| | |check| | | | |check| | |check| | |check| | | |
+------------------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+
| lroundf128 | |check| | |check| | | |check| | | | | | | | | |
+------------------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+
| modf | |check| | |check| | |check| | |check| | |check| | | | |check| | |check| | |check| | | |
+------------------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+
| modff | |check| | |check| | |check| | |check| | |check| | | | |check| | |check| | |check| | | |
+------------------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+
| modfl | |check| | |check| | |check| | |check| | |check| | | | |check| | |check| | |check| | | |
+------------------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+
| modff128 | |check| | |check| | | |check| | | | | | | | | |
+------------------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+
| nan | |check| | |check| | |check| | |check| | |check| | | | |check| | |check| | |check| | | |
+------------------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+
| nanf | |check| | |check| | |check| | |check| | |check| | | | |check| | |check| | |check| | | |
+------------------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+
| nanl | |check| | |check| | |check| | |check| | |check| | | | |check| | |check| | |check| | | |
+------------------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+
| nanf128 | |check| | |check| | | |check| | | | | | | | | |
+------------------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+
| nearbyint | |check| | |check| | |check| | |check| | |check| | | | |check| | |check| | |check| | | |
+------------------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+
| nearbyintf | |check| | |check| | |check| | |check| | |check| | | | |check| | |check| | |check| | | |
+------------------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+
| nearbyintl | |check| | |check| | |check| | |check| | |check| | | | |check| | |check| | |check| | | |
+------------------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+
| nextafter | |check| | |check| | |check| | |check| | |check| | | | |check| | |check| | |check| | | |
+------------------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+
| nextafterf | |check| | |check| | |check| | |check| | |check| | | | |check| | |check| | |check| | | |
+------------------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+
| nextafterl | |check| | |check| | |check| | |check| | |check| | | | |check| | |check| | |check| | | |
+------------------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+
| nextafterf128 | |check| | |check| | | |check| | | | | | | | | |
+------------------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+
| nextdown | |check| | |check| | |check| | |check| | | | | | | | | |
+------------------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+
| nextdownf | |check| | |check| | |check| | |check| | | | | | | | | |
+------------------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+
| nextdownl | |check| | |check| | |check| | |check| | | | | | | | | |
+------------------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+
| nextdownf128 | |check| | |check| | | |check| | | | | | | | | |
+------------------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+
| nexttoward | |check| | |check| | |check| | |check| | |check| | | | |check| | |check| | |check| | | |
+------------------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+
| nexttowardf | |check| | |check| | |check| | |check| | |check| | | | |check| | |check| | |check| | | |
+------------------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+
| nexttowardl | |check| | |check| | |check| | |check| | |check| | | | |check| | |check| | |check| | | |
+------------------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+
| nextup | |check| | |check| | |check| | |check| | | | | | | | | |
+------------------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+
| nextupf | |check| | |check| | |check| | |check| | | | | | | | | |
+------------------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+
| nextupl | |check| | |check| | |check| | |check| | | | | | | | | |
+------------------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+
| nextupf128 | |check| | |check| | | |check| | | | | | | | | |
+------------------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+
| remainder | |check| | |check| | |check| | |check| | |check| | | | |check| | |check| | |check| | | |
+------------------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+
| remainderf | |check| | |check| | |check| | |check| | |check| | | | |check| | |check| | |check| | | |
+------------------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+
| remainderl | |check| | |check| | |check| | |check| | |check| | | | |check| | |check| | |check| | | |
+------------------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+
| remquo | |check| | |check| | |check| | |check| | |check| | | | |check| | |check| | |check| | | |
+------------------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+
| remquof | |check| | |check| | |check| | |check| | |check| | | | |check| | |check| | |check| | | |
+------------------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+
| remquol | |check| | |check| | |check| | |check| | |check| | | | |check| | |check| | |check| | | |
+------------------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+
| rint | |check| | |check| | |check| | |check| | |check| | | | |check| | |check| | |check| | | |
+------------------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+
| rintf | |check| | |check| | |check| | |check| | |check| | | | |check| | |check| | |check| | | |
+------------------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+
| rintl | |check| | |check| | |check| | |check| | |check| | | | |check| | |check| | |check| | | |
+------------------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+
| rintf128 | |check| | |check| | | |check| | | | | | | | | |
+------------------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+
| round | |check| | |check| | |check| | |check| | |check| | | | |check| | |check| | |check| | | |
+------------------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+
| roundf | |check| | |check| | |check| | |check| | |check| | | | |check| | |check| | |check| | | |
+------------------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+
| roundl | |check| | |check| | |check| | |check| | |check| | | | |check| | |check| | |check| | | |
+------------------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+
| roundf128 | |check| | |check| | | |check| | | | | | | | | |
+------------------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+
| scalbn | |check| | |check| | |check| | |check| | |check| | | | |check| | |check| | |check| | | |
+------------------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+
| scalbnf | |check| | |check| | |check| | |check| | |check| | | | |check| | |check| | |check| | | |
+------------------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+
| scalbnl | |check| | |check| | |check| | |check| | |check| | | | |check| | |check| | |check| | | |
+------------------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+
| trunc | |check| | |check| | |check| | |check| | |check| | | | |check| | |check| | |check| | | |
+------------------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+
| truncf | |check| | |check| | |check| | |check| | |check| | | | |check| | |check| | |check| | | |
+------------------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+
| truncl | |check| | |check| | |check| | |check| | |check| | | | |check| | |check| | |check| | | |
+------------------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+
| truncf128 | |check| | |check| | | |check| | | | | | | | | |
+------------------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+
2024-03-27 19:28:27 +00:00
| ufromfp | |check| | |check| | |check| | |check| | | | | | | | | |
2024-03-26 17:58:22 +05:30
+------------------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+
2024-03-27 19:28:27 +00:00
| ufromfpf | |check| | |check| | |check| | |check| | | | | | | | | |
2024-03-26 17:58:22 +05:30
+------------------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+
2024-03-27 19:28:27 +00:00
| ufromfpl | |check| | |check| | |check| | |check| | | | | | | | | |
2024-03-26 17:58:22 +05:30
+------------------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+
2024-03-27 19:28:27 +00:00
| ufromfpf128 | |check| | |check| | | |check| | | | | | | | | |
2024-03-26 17:58:22 +05:30
+------------------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+
2024-03-27 19:28:27 +00:00
| ufromfpx | |check| | |check| | |check| | |check| | | | | | | | | |
2024-03-26 17:58:22 +05:30
+------------------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+
2024-03-27 19:28:27 +00:00
| ufromfpxf | |check| | |check| | |check| | |check| | | | | | | | | |
2024-03-26 17:58:22 +05:30
+------------------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+
2024-03-27 19:28:27 +00:00
| ufromfpxl | |check| | |check| | |check| | |check| | | | | | | | | |
2024-03-26 17:58:22 +05:30
+------------------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+
2024-03-27 19:28:27 +00:00
| ufromfpxf128 | |check| | |check| | | |check| | | | | | | | | |
2024-03-26 17:58:22 +05:30
+------------------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+
2023-05-25 15:54:00 -04:00
2022-06-15 19:57:46 -04:00
Higher Math Functions
---------------------
2023-05-25 15:54:00 -04:00
+------------+---------------------------------------+-------------------+-------------------+-------------------+-------------------+
| <Func> | Linux | Windows | MacOS | Embedded | GPU |
| +---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+
| | x86_64 | aarch64 | aarch32 | riscv64 | x86_64 | aarch64 | x86_64 | aarch64 | aarch32 | riscv32 | AMD | nVidia |
+============+=========+=========+=========+=========+=========+=========+=========+=========+=========+=========+=========+=========+
| acos | | | | | | | | | | | | |
+------------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+
2024-01-22 18:46:48 -08:00
| acosf | |check| | |check| | |check| | |check| | |check| | | | |check| | |check| | |check| | | |
2023-05-25 15:54:00 -04:00
+------------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+
| acosl | | | | | | | | | | | | |
+------------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+
| acosh | | | | | | | | | | | | |
+------------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+
2024-01-22 18:46:48 -08:00
| acoshf | |check| | |check| | |check| | |check| | |check| | | | |check| | |check| | |check| | | |
2023-05-25 15:54:00 -04:00
+------------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+
| acoshl | | | | | | | | | | | | |
+------------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+
| asin | | | | | | | | | | | | |
+------------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+
2024-01-22 18:46:48 -08:00
| asinf | |check| | |check| | |check| | |check| | |check| | | | |check| | |check| | |check| | | |
2023-05-25 15:54:00 -04:00
+------------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+
| asinl | | | | | | | | | | | | |
+------------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+
| asinh | | | | | | | | | | | | |
+------------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+
2024-01-22 18:46:48 -08:00
| asinhf | |check| | |check| | |check| | |check| | |check| | | | |check| | |check| | |check| | | |
2023-05-25 15:54:00 -04:00
+------------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+
| asinhl | | | | | | | | | | | | |
+------------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+
| atan | | | | | | | | | | | | |
+------------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+
2024-01-22 18:46:48 -08:00
| atanf | |check| | |check| | |check| | |check| | |check| | | | |check| | |check| | |check| | | |
2023-05-25 15:54:00 -04:00
+------------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+
| atanl | | | | | | | | | | | | |
+------------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+
| atan2 | | | | | | | | | | | | |
+------------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+
| atan2f | | | | | | | | | | | | |
+------------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+
| atan2l | | | | | | | | | | | | |
+------------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+
| atanh | | | | | | | | | | | | |
+------------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+
2024-01-22 18:46:48 -08:00
| atanhf | |check| | |check| | |check| | |check| | |check| | | | |check| | |check| | |check| | | |
2023-05-25 15:54:00 -04:00
+------------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+
| atanhl | | | | | | | | | | | | |
+------------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+
| cbrt | | | | | | | | | | | | |
+------------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+
| cbrtf | | | | | | | | | | | | |
+------------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+
| cbrtl | | | | | | | | | | | | |
+------------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+
| cos | |check| | | | | |check| | | | | | | | |
+------------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+
2024-01-22 18:46:48 -08:00
| cosf | |check| | |check| | |check| | |check| | |check| | | | |check| | |check| | |check| | | |
2023-05-25 15:54:00 -04:00
+------------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+
| cosl | | | | | | | | | | | | |
+------------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+
| cosh | | | | | | | | | | | | |
+------------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+
2024-01-22 18:46:48 -08:00
| coshf | |check| | |check| | |check| | |check| | |check| | | | |check| | |check| | |check| | | |
2023-05-25 15:54:00 -04:00
+------------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+
| coshl | | | | | | | | | | | | |
+------------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+
| erf | | | | | | | | | | | | |
+------------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+
2024-01-22 18:46:48 -08:00
| erff | |check| | |check| | |check| | |check| | |check| | | | |check| | |check| | |check| | | |
2023-05-25 15:54:00 -04:00
+------------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+
| erfl | | | | | | | | | | | | |
+------------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+
| erfc | | | | | | | | | | | | |
+------------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+
| erfcf | | | | | | | | | | | | |
+------------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+
| erfcl | | | | | | | | | | | | |
+------------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+
2024-01-22 18:46:48 -08:00
| exp | |check| | |check| | |check| | |check| | |check| | | | |check| | |check| | |check| | | |
2023-05-25 15:54:00 -04:00
+------------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+
2024-01-22 18:46:48 -08:00
| expf | |check| | |check| | |check| | |check| | |check| | | | |check| | |check| | |check| | | |
2023-05-25 15:54:00 -04:00
+------------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+
| expl | | | | | | | | | | | | |
+------------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+
2024-01-22 18:46:48 -08:00
| exp10 | |check| | |check| | |check| | |check| | |check| | | | |check| | |check| | |check| | | |
2023-05-25 15:54:00 -04:00
+------------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+
2024-01-22 18:46:48 -08:00
| exp10f | |check| | |check| | |check| | |check| | |check| | | | |check| | |check| | |check| | | |
2023-05-25 15:54:00 -04:00
+------------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+
| exp10l | | | | | | | | | | | | |
+------------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+
2024-01-22 18:46:48 -08:00
| exp2 | |check| | |check| | |check| | |check| | |check| | | | |check| | |check| | |check| | | |
2023-05-25 15:54:00 -04:00
+------------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+
2024-01-22 18:46:48 -08:00
| exp2f | |check| | |check| | |check| | |check| | |check| | | | |check| | |check| | |check| | | |
2023-05-25 15:54:00 -04:00
+------------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+
| exp2l | | | | | | | | | | | | |
+------------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+
2024-01-22 18:46:48 -08:00
| expm1 | |check| | |check| | |check| | |check| | |check| | | | |check| | |check| | |check| | | |
2023-05-25 15:54:00 -04:00
+------------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+
2024-01-22 18:46:48 -08:00
| expm1f | |check| | |check| | |check| | |check| | |check| | | | |check| | |check| | |check| | | |
2023-05-25 15:54:00 -04:00
+------------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+
| expm1l | | | | | | | | | | | | |
+------------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+
2024-01-22 18:46:48 -08:00
| fma | |check| | |check| | |check| | |check| | |check| | | | |check| | |check| | |check| | | |
2023-05-25 15:54:00 -04:00
+------------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+
2024-01-22 18:46:48 -08:00
| fmaf | |check| | |check| | |check| | |check| | |check| | | | |check| | |check| | |check| | | |
2023-05-25 15:54:00 -04:00
+------------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+
| fmal | | | | | | | | | | | | |
+------------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+
2024-01-22 18:46:48 -08:00
| hypot | |check| | |check| | |check| | |check| | |check| | | | |check| | |check| | |check| | | |
2023-05-25 15:54:00 -04:00
+------------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+
2024-01-22 18:46:48 -08:00
| hypotf | |check| | |check| | |check| | |check| | |check| | | | |check| | |check| | |check| | | |
2023-05-25 15:54:00 -04:00
+------------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+
| hypotl | | | | | | | | | | | | |
+------------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+
| lgamma | | | | | | | | | | | | |
+------------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+
| lgammaf | | | | | | | | | | | | |
+------------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+
| lgammal | | | | | | | | | | | | |
+------------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+
2024-01-22 18:46:48 -08:00
| log | |check| | |check| | |check| | |check| | |check| | | | |check| | |check| | |check| | | |
2023-05-25 15:54:00 -04:00
+------------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+
2024-01-22 18:46:48 -08:00
| logf | |check| | |check| | |check| | |check| | |check| | | | |check| | |check| | |check| | | |
2023-05-25 15:54:00 -04:00
+------------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+
| logl | | | | | | | | | | | | |
+------------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+
2024-01-22 18:46:48 -08:00
| log10 | |check| | |check| | |check| | |check| | |check| | | | |check| | |check| | |check| | | |
2023-05-25 15:54:00 -04:00
+------------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+
2024-01-22 18:46:48 -08:00
| log10f | |check| | |check| | |check| | |check| | |check| | | | |check| | |check| | |check| | | |
2023-05-25 15:54:00 -04:00
+------------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+
| log10l | | | | | | | | | | | | |
+------------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+
2024-01-22 18:46:48 -08:00
| log1p | |check| | |check| | |check| | |check| | |check| | | | |check| | |check| | |check| | | |
2023-05-25 15:54:00 -04:00
+------------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+
2024-01-22 18:46:48 -08:00
| log1pf | |check| | |check| | |check| | |check| | |check| | | | |check| | |check| | |check| | | |
2023-05-25 15:54:00 -04:00
+------------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+
| log1pl | | | | | | | | | | | | |
+------------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+
2024-01-22 18:46:48 -08:00
| log2 | |check| | |check| | |check| | |check| | |check| | | | |check| | |check| | |check| | | |
2023-05-25 15:54:00 -04:00
+------------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+
2024-01-22 18:46:48 -08:00
| log2f | |check| | |check| | |check| | |check| | |check| | | | |check| | |check| | |check| | | |
2023-05-25 15:54:00 -04:00
+------------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+
| log2l | | | | | | | | | | | | |
+------------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+
| pow | | | | | | | | | | | | |
+------------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+
2024-01-22 18:46:48 -08:00
| powf | |check| | |check| | |check| | |check| | |check| | | | |check| | |check| | |check| | | |
2023-05-25 15:54:00 -04:00
+------------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+
| powl | | | | | | | | | | | | |
+------------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+
| sin | |check| | | | | | | | | | | | |
+------------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+
2024-01-22 18:46:48 -08:00
| sinf | |check| | |check| | |check| | |check| | |check| | | | |check| | |check| | |check| | | |
2023-05-25 15:54:00 -04:00
+------------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+
| sinl | | | | | | | | | | | | |
+------------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+
| sincos | | | | | | | | | | | | |
+------------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+
2024-01-22 18:46:48 -08:00
| sincosf | |check| | |check| | |check| | |check| | |check| | | | |check| | |check| | |check| | | |
2023-05-25 15:54:00 -04:00
+------------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+
| sincosl | | | | | | | | | | | | |
+------------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+
| sinh | | | | | | | | | | | | |
+------------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+
2024-01-22 18:46:48 -08:00
| sinhf | |check| | |check| | |check| | |check| | |check| | | | |check| | |check| | |check| | | |
2023-05-25 15:54:00 -04:00
+------------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+
| sinhl | | | | | | | | | | | | |
+------------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+
2024-01-22 18:46:48 -08:00
| sqrt | |check| | |check| | |check| | |check| | |check| | | | |check| | |check| | |check| | | |
2023-05-25 15:54:00 -04:00
+------------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+
2024-01-22 18:46:48 -08:00
| sqrtf | |check| | |check| | |check| | |check| | |check| | | | |check| | |check| | |check| | | |
2023-05-25 15:54:00 -04:00
+------------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+
2024-01-22 18:46:48 -08:00
| sqrtl | |check| | |check| | |check| | |check| | |check| | | | |check| | |check| | |check| | | |
2023-05-25 15:54:00 -04:00
+------------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+
2024-01-24 10:16:12 -05:00
| sqrtf128 | |check| | | | | | | | | | | | |
+------------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+
2023-05-25 15:54:00 -04:00
| tan | |check| | | | | | | | | | | | |
+------------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+
2024-01-22 18:46:48 -08:00
| tanf | |check| | |check| | |check| | |check| | |check| | | | |check| | |check| | |check| | | |
2023-05-25 15:54:00 -04:00
+------------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+
| tanl | | | | | | | | | | | | |
+------------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+
| tanh | | | | | | | | | | | | |
+------------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+
2024-01-22 18:46:48 -08:00
| tanhf | |check| | |check| | |check| | |check| | |check| | | | |check| | |check| | |check| | | |
2023-05-25 15:54:00 -04:00
+------------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+
| tanhl | | | | | | | | | | | | |
+------------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+
| tgamma | | | | | | | | | | | | |
+------------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+
| tgammaf | | | | | | | | | | | | |
+------------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+
| tgammal | | | | | | | | | | | | |
+------------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+
2022-06-15 19:57:46 -04:00
Accuracy of Higher Math Functions
=================================
2024-01-24 10:16:12 -05:00
============== ================ =============== ====================== ======================
<Func> <Func_f> (float) <Func> (double) <Func_l> (long double) <Func_f128> (float128)
============== ================ =============== ====================== ======================
2023-05-25 15:54:00 -04:00
acos |check|
acosh |check|
asin |check|
asinh |check|
atan |check|
atanh |check|
cos |check| large
cosh |check|
2023-06-24 00:08:31 -04:00
erf |check|
2023-08-22 16:54:34 -04:00
exp |check| |check|
2023-09-28 16:43:15 -04:00
exp10 |check| |check|
2023-08-25 00:42:22 -04:00
exp2 |check| |check|
2023-09-28 16:43:15 -04:00
expm1 |check| |check|
2023-05-25 15:54:00 -04:00
fma |check| |check|
hypot |check| |check|
log |check| |check|
log10 |check| |check|
log1p |check| |check|
log2 |check| |check|
[libc][math] Implement powf function correctly rounded to all rounding modes. (#71188)
We compute `pow(x, y)` using the formula
```
pow(x, y) = x^y = 2^(y * log2(x))
```
We follow similar steps as in `log2f(x)` and `exp2f(x)`, by breaking
down into `hi + mid + lo` parts, in which `hi` parts are computed using
the exponent field directly, `mid` parts will use look-up tables, and
`lo` parts are approximated by polynomials.
We add some speedup for common use-cases:
```
pow(2, y) = exp2(y)
pow(10, y) = exp10(y)
pow(x, 2) = x * x
pow(x, 1/2) = sqrt(x)
pow(x, -1/2) = rsqrt(x) - to be added
```
2023-11-06 16:54:25 -05:00
pow |check|
2023-05-25 15:54:00 -04:00
sin |check| large
sincos |check| large
sinh |check|
2024-01-24 10:16:12 -05:00
sqrt |check| |check| |check| |check|
2023-05-25 15:54:00 -04:00
tan |check|
tanh |check|
2024-01-24 10:16:12 -05:00
============== ================ =============== ====================== ======================
2022-06-15 19:57:46 -04:00
2023-05-25 15:54:00 -04:00
2022-06-15 19:57:46 -04:00
Legends:
2023-05-25 15:54:00 -04:00
* |check| : correctly rounded for all 4 rounding modes.
2022-06-15 19:57:46 -04:00
* CR: correctly rounded for the default rounding mode (round-to-the-nearest,
tie-to-even).
* x ULPs: largest errors recorded.
..
TODO(lntue): Add a new page to discuss about the algorithms used in the
implementations and include the link here.
Performance
===========
2024-03-11 11:38:39 -04:00
* 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> `_ .
2022-06-15 19:57:46 -04:00
* We also use the *perf* tool from the `CORE-MATH <https://core-math.gitlabpages.inria.fr/> `_
project: `link <https://gitlab.inria.fr/core-math/core-math/-/tree/master> `_ .
2022-06-17 09:32:06 -04:00
The performance results from the CORE-MATH's perf tool are reported in the
2022-06-15 19:57:46 -04:00
table below, using the system library as reference (such as the `GNU C library <https://www.gnu.org/software/libc/> `_
2024-03-11 11:38:39 -04:00
on Linux). Fmod performance results obtained with "performance_testing".
2022-06-15 19:57:46 -04:00
2023-04-06 09:26:16 -04:00
+--------------+-------------------------------+-------------------------------+-------------------------------------+----------------------------------------------------------------------+
2023-04-18 14:09:42 -04:00
| <Func> | Reciprocal throughput (clk) | Latency (clk) | Testing ranges | Testing configuration |
2023-04-06 09:26:16 -04:00
| +-----------+-------------------+-----------+-------------------+ +-------------+-------------------------+--------------+---------------+
| | 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 |
+--------------+-----------+-------------------+-----------+-------------------+-------------------------------------+-------------+-------------------------+--------------+---------------+
2022-06-15 19:57:46 -04:00
2023-01-08 17:19:13 -05:00
Algorithms + Implementation Details
===================================
2023-02-14 12:36:07 -05:00
* :doc: `log`
2023-01-08 17:19:13 -05:00
2024-02-13 16:48:14 -05:00
Fixed-point Arithmetics
=======================
* :doc: `stdfix`
2022-06-15 19:57:46 -04:00
References
==========
* `CRLIBM <https://hal-ens-lyon.archives-ouvertes.fr/ensl-01529804/file/crlibm.pdf> `_ .
* `RLIBM <https://people.cs.rutgers.edu/~sn349/rlibm/> `_ .
* `Sollya <https://www.sollya.org/> `_ .
* `The CORE-MATH Project <https://core-math.gitlabpages.inria.fr/> `_ .
* `The GNU C Library (glibc) <https://www.gnu.org/software/libc/> `_ .
* `The GNU MPFR Library <https://www.mpfr.org/> `_ .